Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 SZB, L.Banachowski SQL - język relacyjnych i obiektowo- relacyjnych baz danych Zaawansowane cechy Wyk ł ad 3.

Podobne prezentacje


Prezentacja na temat: "1 SZB, L.Banachowski SQL - język relacyjnych i obiektowo- relacyjnych baz danych Zaawansowane cechy Wyk ł ad 3."— Zapis prezentacji:

1 1 SZB, L.Banachowski SQL - język relacyjnych i obiektowo- relacyjnych baz danych Zaawansowane cechy Wyk ł ad 3

2 2 SZB, L.Banachowski Perspektywy – podstawa poziomów zewnętrznych bazy danych Zapamiętana w bazie danych definicja zapytania do późniejszego użycia: perspektywa jest wirtualną tabelą, można ją używać tak jak tabelę, jej wiersze nie są przechowywane w bazie danych, mogą być wyliczone na żądanie. CREATE VIEW Urz ę dnicy (Empno, Ename, Sal) AS SELECT Empno, Ename, Sal FROM Emp WHERE Job = ' CLERK ' ;

3 3 SZB, L.Banachowski Perspektywy c.d. Perspektywy służą do dostosowania bazy danych do potrzeb różnych grup użytkowników: stanowią perspektywę z jakiej dana klasa użytkownikówwidzi bazę danych; różne grupy użytkowników mogą mieć odmienne perspektywy na te same dane w bazie danych. Umożliwiają wykonywanie instrukcji SELECT, INSERT, DELETE i UPDATE jak na tabelach.

4 4 SZB, L.Banachowski Przykład CREATE VIEW Prac_sprzeda ż y AS SELECT * FROM Emp WHERE Deptno= 20; Używając tej perspektywy możemy przeprowadzać modyfikację danych w odniesieniu do pracowników z działu numer 20 np. możemy podnieść ich zarobki Sal o 10%: UPDATE Prac_sprzeda ż y SET Sal = Sal * 1.1;

5 5 SZB, L.Banachowski Ograniczenia w Standardzie SQL dla modyfikowalnych perspektyw 1. w klauzuli SELECT nie ma DISTINCT, 2. w klauzuli FROM jest tylko jedna nazwa tabeli lub jedna nazwa perspektywy - spełniająca definiowane kryteria, 3. na liście SELECT są tylko nazwy kolumn, 4. w klauzuli WHERE nie ma podzapytania, 5. nie ma klauzul GROUP BY i HAVING. Punkty 1-5 stanowią warunek dostateczny na to, aby jednoznacznie był określony wiersz w tabeli, której dotyczy zmiana.

6 6 SZB, L.Banachowski Modyfikowalne perspektywy zawierające złączenia (Oracle) W Oracle można dokonywać zmian tylko po stronie klucza obcego, np. w tabeli Emp ale nie Dept : CREATE VIEW PracD AS SELECT Empno, Ename, p.Deptno, Dname, Loc FROM Emp p, Dept d WHERE p.Deptno= d.Deptno; INSERT INTO PracD(Empno, Ename, Deptno) VALUES (5600, ' Nowi ń ski ',20); wstawia pracownika Nowiński do tabeli Emp ustalając jego numer działu na 20 (Dname i Loc są nieistotne przy wstawianiu).

7 7 SZB, L.Banachowski Tworzenie perspektywy z opcją sprawdzania CREATE VIEW nazwa_perspektywy[(nazwa_kolumny,...)] AS podzapytanie WITH CHECK OPTION; Opcja WITH CHECK OPTION - przy INSERT i UPDATE następuje sprawdzenie, czy wstawiany bądź modyfikowany wiersz spełnia warunek określony w klauzuli WHERE : jeśli spełnia, operacja jest wykonywana; jeśli nie spełnia, operacja nie zostanie wykonana.

8 8 SZB, L.Banachowski Przykład Perspektywa pracowników będących na urlopie bezpłatnym CREATE VIEW Emp_na_urlopie_bezp ł atnym AS SELECT * FROM Emp WHERE Sal = 0 OR Sal IS NULL WITH CHECK OPTION; Poprzez tę perspektywę nie uda się zmiana wysokości zarobków pracownika o nazwisku Kowalski, jeśli jego Zarobki są równe 0 lub Null. UPDATE Emp_na_urlopie_bezp ł atnym SET Sal = WHERE Ename = ' KOWALSKI ' ;

9 9 SZB, L.Banachowski Perspektywy tylko do odczytu Zabezpieczenie przed dokonywaniem zmian przez perspektywę. CREATE VIEW Pracownicy AS SELECT * FROM Emp WITH READ ONLY; Każdy uprawniony użytkownik: może oglądać dane o pracownikach, nie może wykonywać wstawiania, modyfikowania ani usuwania wierszy.

10 10 SZB, L.Banachowski Podsumowanie perspektyw Umożliwiają realizację poziomów zewnętrznych bazy danych. Udostępnia się je konkretnym grupom użytkowników. Określają widok na bazę danych zaprojektowany dla tej grupy użytkowników. Ułatwia to użycie danych. Stanowi element ochrony przed niepowołanym lub nieprawidłowym dostępem do danych. Każdy użytkownik bazy danych ma dostęp tylko do danych dotyczących jego działalności w firmie.

11 11 SZB, L.Banachowski Lokalne perspektywy (inline views) Możemy poprzedzić instrukcje SELECT, INSERT, DELETE i UPDATE klauzulą WITH, definiując lokalne perspektywy widoczne tylko w danej instrukcji SQL. WITH dept_costs AS ( SELECT department_name, SUM(salary) dept_total FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY department_name)), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) avg FROM dept_costs) SELECT * FROM dept_costs WHERE dept_total > (SELECT avg FROM avg_cost) ORDER BY department_name;

12 12 SZB, L.Banachowski Tworzenie synonimów nazw tabel i perspektyw W przypadku długich identyfikatorów obiektów (np. specyfikacje sieciowe) – własne synonimy. CREATE SYNONYM nazwa_synonimu FOR nazwa_tabeli_lub_perspektywy; CREATE SYNONYM Dept FOR DROP SYNONYM nazwa_synonimu; Wspomaga niezależność logiczną danych. Każdy poziom zewnętrzny może mieć swoje odrębne nazwy.

13 13 SZB, L.Banachowski Transakcje Często elementarną operacją na bazie danych nie jest wcale pojedyncza instrukcja SQL, ale ciąg takich instrukcji, nazywany transakcją. Np. przelanie pieniędzy z jednego konta na drugie, jest elementarną operacją z punktu widzenia aplikacji bankowej. W SQL używamy w tym celu co najmniej dwóch instrukcji UPDATE : UPDATE Konta SET Saldo = Saldo – 1000 WHERE Id_klienta = 1001; UPDATE Konta SET Saldo = Saldo WHERE Id_klienta = 9999;

14 14 SZB, L.Banachowski Transakcje c.d. Załóżmy, że pierwsza instrukcja wykonała się, a druga nie może zostać wykonana na przykład z powodu tego, że 9999 jest błędnym identyfikatorem klienta albo z powodu awarii komputera. Z punktu widzenia aplikacji dane znalazły się w stanie niespójnym i pozostaje tylko jedna możliwość - wycofać wynik pierwszej instrukcji UPDATE. Do tego celu służy instrukcja ROLLBACK. COMMIT - zatwierdza zmiany w bazie danych bez możliwości późniejszego ich wycofania. UPDATE Konta SET Saldo = Saldo – 1000 WHERE Id_klienta = 1001; UPDATE Konta SET Saldo = Saldo WHERE Id_klienta = 9999;

15 15 SZB, L.Banachowski Zagnieżdżone wycofywanie transakcji do SAVEPOINT Wycofanie w tył części ostatnio wykonywanych instrukcji do punktu zachowania (savepoint): –SAVEPOINT punkt; Instrukcja wycofania ma wtedy postać: –ROLLBACK TO SAVEPOINT punkt;

16 16 SZB, L.Banachowski Transakcje autonomiczne w Oracle.... DECLARE PRAGMA autonomous_transaction; BEGIN DELETE FROM Emp WHERE Emp.Job='GHOSTBUSTER'; COMMIT; END; ROLLBACK;

17 17 SZB, L.Banachowski Blokowanie dostępu do tabel (Oracle) Zakładane blokady na wierszach, na których są przeprowadzane operacje. Programista może sam założyć blokadę na tabelę ograniczając możliwości jej zmian przez innych użytkowników. LOCK TABLE nazwa_tabeli IN [SHARE|EXCLUSIVE] MODE [NOWAIT]; SHARE – tryb współdzielony - przeciwko zmianom dokonywanym przez kogokolwiek (wielu użytkowników może założyć taką blokadę jednocześnie), EXCLUSIVE - tryb wyłączny - przeciwko zmianom dokonywanym przez innych użytkowników, samemu można zmieniać (tylko jeden użytkownik może mieć założoną taką blokadę), NOWAIT - nie czekać gdy założona blokada. Zdjęcie blokady przez wykonanie COMMIT lub ROLLBACK.

18 18 SZB, L.Banachowski Blokady W Oracle: każdy użytkownik - mający odpowiednie uprawnienia - może odczytywać zatwierdzone dane w tabeli, niezależnie od założonych blokad. W innych systemach tryb EXCLUSIVE uniemożliwia jednoczesne odczytywanie danych.

19 19 SZB, L.Banachowski Klauzula FOR UPDATE W systemie Oracle jest możliwe założenie blokady na wiersze będące wynikiem zapytania: SELECT nazwa_kolumny... FOR UPDATE [NOWAIT]; Wykonanie COMMIT lub ROLLBACK kończy blokadę wskazanych wierszy.

20 20 SZB, L.Banachowski Transakcje tylko-odczyt Zamrożenie widoku bazy danych do jej aktualnego stanu dla następnie wykonywanych instrukcji SELECT. Instrukcje SELECT korzystają ze zdjęcia migawkowego bazy danych wykonanego w tym momencie. Instrukcja SET TRANSACTION READ ONLY; musi być pierwszą instrukcją w transakcji – złożonej z ciągu instrukcji SELECT i LOCK TABLE. ''Odmrożenie'' widoku bazy danych następuje przez wykonanie polecenia COMMIT. Rozpoczęcie transakcji typu nie- READ ONLY (opcjonalne). SET TRANSACTION READ WRITE;

21 21 SZB, L.Banachowski Współbieżne transakcje v Niezatwierdzony odczyt danych (ang. dirty read, read uncommited) - transakcja odczytuje dane, które zmieniła inna transakcja ale ich nie zatwierdziła. v Niepowtarzalny odczyt danych (ang. unreapetable read) - w ramach danej transakcji, widać zmiany wprowadzane przez inne zatwierdzone transakcje. v Fantom - wiersz, którego nie było w tabeli na początku wykonywania danej transakcji, a który został wprowadzony przez inną zatwierdzoną transakcję w trakcie wykonywania danej transakcji.

22 22 SZB, L.Banachowski Poziomy izolacji Poziom izolacji Niezatwierdzony odczyt Niepowtarzalny odczyt Fantomy Read Uncommited TAK Read Commited NIETAK Repeatable Reads NIE TAK SerializableNIE

23 23 SZB, L.Banachowski Ustawianie poziomu izolacji w SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; COMMIT; SET TRANSACTION ISOLATION LEVEL READ COMMITED; COMMIT;

24 24 SZB, L.Banachowski Katalog systemowy, słownik danych - informacja o obiektach bazy danych (Oracle) Ma postać zbioru tabel i perspektyw. z przedrostkiem User - informacja o wszystkich obiektach, których dany użytkownik jest właścicielem – tabele: User_Tables (Tabs), tabele i kolumny: User_Tab_Columns (Cols), więzy spójności: User_Constraints, User_Cons_Columns, indeksy: User_Indexes (Ind), User_Ind_Columns, synonimy: User_Synonyms (Syn), perspektywy: User_Views. z przedrostkiem All - dotyczy wszystkich obiektów do których użytkownik ma uprawnienia (np. All_Tables), z przedrostkiem Dba - informacja o obiektach dostępnych dla administratorów systemu (np. Dba_Users).

25 25 SZB, L.Banachowski Przykłady SELECT Table_Name FROM User_Tables; -- Podobnie All_Tables wypisuje nazwy tabel, których właścicielem jest dany użytkownik. SELECT Column_Name, Data_Type FROM User_Tab_Columns WHERE Table_Name = ' EMP ' ; COLUMN_NAME DATA_TYPE EMPNO NUMBER ENAME VARCHAR2 JOB VARCHAR2 MGR NUMBER HIREDATE DATE SAL NUMBER COMM NUMBER DEPTNO NUMBER

26 26 SZB, L.Banachowski Przyznawanie i odbieranie uprawnień w bazie danych GRANT uprawnienie,... ON obiekt TO użytkownik,...|PUBLIC [WITH GRANT OPTION] uprawnienie - rodzaj operacji, do jakiej użytkownik uzyskuje uprawnienie, np. SELECT, DELETE, INSERT, UPDATE, ALTER i EXECUTE ; obiekt - tabela, perspektywa, … WITH GRANT OPTION - obdarowany użytkownik może uzyskane uprawnienia przekazywać innym użytkownikom; PUBLIC - przyznanie uprawnienia wszystkich użytkownikom.

27 27 SZB, L.Banachowski Przykład Nadać księgowej uprawnienia dostępu do tabeli Emp w zakresie wykonywania instrukcji SELECT oraz również instrukcji UPDATE, ale tylko w odniesieniu do kolumny Sal. GRANT SELECT, UPDATE(Sal) ON Emp TO Ksi ę gowa;

28 28 SZB, L.Banachowski Uprawnienia systemowe Np. CREATE TABLE, CREATE VIEW, CREATE SESSION (uprawnienie do logowania się do bazy danych). Administrator bazy danych Oracle tworzy konto użytkownika za pomocą instrukcji: CREATE USER użytkownik IDENTIFIED BY hasło ; GRANT CREATE SESSION, CREATE TABLE TO użytkownik ; DROP USER użytkownik [CASCADE] ; CASCADE - system usuwa użytkownika razem ze wszystkimi jego obiektami.

29 29 SZB, L.Banachowski REVOKE Uprawnienia odwołuje się za pomocą instrukcji odwrotnej do instrukcji GRANT. REVOKE uprawnienie,... ON nazwa_obiektu FROM użytkownik,...|PUBLIC;

30 30 SZB, L.Banachowski Role W celu ułatwienia przyznawania uprawnień dużej liczbie użytkowników zostało wprowadzone pojęcie roli tzn. powiązania grupy użytkowników ze zbiorem uprawnień. Z jednej strony konkretnym użytkownikom przyznaje się uprawnienie do danej roli (przyznając im tę rolę). Z drugiej strony roli przyznaje się konkretne uprawnienia do wykonywania operacji w bazie danych.

31 31 SZB, L.Banachowski Przykład Utwórz role Dyrektora i Urzędnika, przydziel im uprawnienia i zalicz do nich konkretnych użytkowników: CREATE ROLE Dyrektor; CREATE ROLE Urz ę dnik; GRANT SELECT ON Emp TO Dyrektor; GRANT SELECT, UPDATE ON Emp TO Urz ę dnik; GRANT Dyrektor TO King, Leon; GRANT Urz ę dnik TO Liza, Ewa, Marta;

32 32 SZB, L.Banachowski Role zdefiniowane przez System CONNECT - zawierająca uprawnienie CREATE SESSION, RESOURCE - uprawnienia do tworzenia obiektów, DBA - uprawnienia do wykonywania funkcji administratora systemu. Przy tworzeniu konta nowego użytkownika przydziela się mu się najczęściej role: CONNECT i RESOURCE – umożliwiające pełne korzystanie z instrukcji SQL na swoim koncie.

33 33 SZB, L.Banachowski Schemat Schemat tworzy grupę powiązanych obiektów. CREATE SCHEMA nazwa_schematu ciąg instrukcji CREATE TABLE, CREATE VIEW i GRANT (bez rozdzielających średników); Ciąg składowych instrukcji jest realizowany jako transakcja: albo są wykonywane wszystkie instrukcje albo żadna. W instrukcjach składowych mogą być odwołania cykliczne REFERENCES między tabelami.

34 34 SZB, L.Banachowski Schemat, katalog, klaster, schemat informacyjny W Standardzie nie występuje w sposób jawny pojęcie bazy danych. Katalog - zbiór schematów. Schemat ma jednego właściciela. W skład katalogu mogą wchodzić schematy mające różnych właścicieli. Klaster - zbiór katalogów. Klaster może być traktowany jako rozproszona baza danych składająca się ze zbioru katalogów, do których użytkownik ma dostęp w ramach jednej sesji. Dla każdego katalogu powinien być określony jeden schemat nazywany schematem informacyjnym pełniący rolę słownika danych dla całego katalogu.

35 35 SZB, L.Banachowski Sesja i połączenia Zarówno w Standardzie jak i w Oracle istnieją możliwości zmiany ustawień dla danej sesji użytkownika. W Standardzie z każdą sesją jest związany zbiór połączeń z różnymi bazami danych, z których tylko jedno jest aktywne. Stosowane są następujące polecenia: 1.uzyskiwanie nowego połączenia CONNECT TO nazwa_serwera; 2.zmiana istniejącego połączenia SET CONNECTION nazwa_serwera; 3.rozłączenie połączenia DISCONNECT nazwa_serwera;

36 36 SZB, L.Banachowski ALTER SESSION Niektóre własności sesji mogą być zmieniane w trakcie połączenia. W Oracle zmiany wprowadza się za pomocą instrukcji ALTER SESSION, na przykład: ALTER SESSION ISOLATION LEVEL SERIALIZABLE; powoduje ustawienie poziomu izolacji transakcji w sesji na SERIALIZABLE.

37 37 SZB, L.Banachowski Dziedziny (domeny) (Standard) Zdefiniujmy dziedzinę numerów departamentów: CREATE DOMAIN Dept# CHAR(3) CHECK (VALUE IN ('A00','B01','D01','D11','D21', 'XXX')) DEFAULT 'XXX'; Następnie, możemy jej użyć przy określaniu typu danych kolumn w tabelach: CREATE TABLE Dept (DeptNo DOMAIN Dept# PRIMARY KEY,...);

38 38 SZB, L.Banachowski Asercje (Standard) Więzy spójności definiowane poza instrukcjami CREATE TABLE i ALTER TABLE dotyczące całej tabeli. CREATE ASSERTION maxempl CHECK (1000 <= SELECT COUNT ( * ) FROM Emp); DROP ASSERTION nazwa_asercji;

39 39 SZB, L.Banachowski Tabele tymczasowe Są częścią schematu bazy danych - ich zawartość jest niszczona: przy każdym zakończeniu sesji użytkownika ( ON COMMIT PRESERVE ROWS ), przy każdej operacji COMMIT (opcja ON COMMIT DELETE ROWS ). CREATE GLOBAL TEMPORARY TABLE Prac_zatrudniani_dzi ś (Nr_kolejny INTEGER PRIMARY KEY, Imi ę VARCHAR(40) NOT NULL, Nazwisko VARCHAR(50) NOT NULL, Informacja VARCHAR(1000)) ON COMMIT PRESERVE ROWS;

40 40 SZB, L.Banachowski Tabele chwilowe SELECT MAX(p.NumEmp) maxNE, MAX(p.AvgSal) maxSA FROM (SELECT Deptno, Count(Empno) NumEmp, Avg(Sal) AvgSal FROM Emp GROUP BY Deptno )p;

41 41 SZB, L.Banachowski Rodzaje tabel v trwałe - przechowywane na stałe w bazie danych, objęte mechanizmami wycofywania zmian i odtwarzania po awarii; v tymczasowe - przechowywane na czas sesji lub transakcji, objęte tylko mechanizmem wycofywania zmian; v chwilowe - wyliczane i przechowywane na czas realizacji jednego zapytania.

42 42 SZB, L.Banachowski Generowanie jednoznacznych numerów (Oracle) Sekwencja - przechowywana w bazie danych - służy do generowania jednoznacznych numerów dla wartości kluczy głównych. CREATE SEQUENCE nazwa_sekwencji [INCREMENT BY k] [START WITH n]; gdzie n jest pierwszą generowaną liczbą naturalną, a k jest wartością, o jaką wzrasta kolejno generowany numer. nazwa_sekwencji. NextVal - generowanie kolejnej wartości w sekwencji, nazwa_sekwencji. CurrVal - ostatnio wygenerowana wartość w sekwencji (w ramach aktualnej sesji).

43 43 SZB, L.Banachowski Przykład Utwórz dwie sekwencje generujące jednoznaczne numery dla działów i dla pracowników. CREATE SEQUENCE Dept_seq INCREMENT BY 10 START WITH 10; CREATE SEQUENCE Emp_seq INCREMENT BY 1 START WITH 1000;

44 44 SZB, L.Banachowski Przykład INSERT INTO Dept(Deptno, Dname, Loc) VALUES (Dept_seq.NextVal, ' Sprzeda ż', ' Warszawa ' ); Oto instrukcja tworząca kolejnego pracownika, z wykorzystaniem wygenerowanego przed chwilą, numeru działu: INSERT INTO Emp VALUES (Emp_seq.NextVal, 'Stec', 'MANAGER', NULL, '20-JAN-90', 10000, 0, Dept_seq.CurrVal);

45 45 SZB, L.Banachowski Klaster (Oracle) Struktura fizycznego przechowywania danych, w której kilka tabel jest zebranych razem według wartości wspólnej kolumny (kolumn) - lub wartości funkcji haszującej. Umożliwia szybsze dokonywanie złączeń tabel wchodzących w skład klastra. Najpierw tworzy się klaster, następnie tabele w klastrze i w końcu indeks klastra. Dopiero w tym momencie można rozpocząć wstawianie wierszy do tabel w klastrze. Przykład klastra dla tabel Dept i Emp. Indeksem klastra, względem którego gromadzone są obok siebie na dysku wiersze tych tabel, jest numer działu. Razem jest trzymany wiersz opisujący dział jak i wiersze pracowników przypisanych do tego działu.

46 46 SZB, L.Banachowski Przykład CREATE CLUSTER Personnel (Department_number NUMBER(2)); CREATE TABLE Dept (Deptno NUMBER(2) PRIMARY KEY, Dname VARCHAR2(9), Loc VARCHAR2(9)) CLUSTER Personnel (Deptno); CREATE TABLE Emp (Empno NUMBER PRIMARY KEY, Ename VARCHAR2(10) NOT NULL, Job VARCHAR2(9), Mgr NUMBER REFERENCES Emp(Empno), Hiredate DATE, Sal NUMBER(10,2), Comm NUMBER(9,0), Deptno NUMBER(2)NOT NULL REFERENCES Dept(Deptno)) CLUSTER Personnel (Deptno); CREATE INDEX Idx_personnel ON CLUSTER Personnel;

47 47 SZB, L.Banachowski Wyzwalacze bazy danych Procedury: v wiązane z jednym z obiektów: –tabelą, –perspektywą, –ze schematem (kontem użytkownika), –całą bazą danych; v wywoływane (odpalane) przez system przy zajściu odpowiedniego zdarzenia, które może być albo zdarzeniem systemowym albo jedną z instrukcji INSERT, DELETE lub UPDATE skierowaną do wykonania na tabeli lub perspektywie w bazie danych.

48 48 SZB, L.Banachowski Wyzwalacze tabelowe v Dla każdej tabeli można określić 12 typów wyzwalaczy (dla jednej tabeli może być więcej niż jeden wyzwalacz jednego typu). v Typ wyzwalacza: – czy dotyczy operacji na pojedynczym wierszu ( wyzwalacz wierszowy ) –czy dotyczy wykonania całej instrukcji –czy ma być wykonywany przed operacją (typ BEFORE) czy po (typ AFTER) –może dotyczyć każdej z trzech instrukcji INSERT, DELETE i UPDATE.

49 49 SZB, L.Banachowski Wyzwalacze typu INSTEAD OF v Realizacja postulatu modyfikowania za pomocą perspektyw. v CREATE [OR REPLACE] TRIGGER nazwa_wyzwalacza INSTEAD OF specyfikacja_instrukcji ON perspektywa blok_PL/SQL v gdzie specyfikacja_instrukcji – ciąg do trzech nazw INSERT, DELETE i UPDATE połączonych spójnikiem OR

50 50 SZB, L.Banachowski Przykład v CREATE OR REPLACE VIEW Ale AS SELECT e.Ename, e.Empno, d.Dname, d.Deptno FROM Emp e, Dept d WHERE e.Deptno = d.Deptno;

51 51 SZB, L.Banachowski v CREATE OR REPLACE TRIGGER Ale_insert v INSTEAD OF INSERT ON Ale v FOR EACH ROW v DECLARE v p NUMBER; v BEGIN v SELECT Count(*) INTO p FROM Dept v WHERE Deptno = :NEW.Deptno; v IF p=0 THEN v INSERT INTO Dept(Deptno,Dname) VALUES(:NEW.Deptno, :NEW.Dname); v ELSE v UPDATE Dept SET Dname=:NEW.Dname v WHERE Deptno=:NEW.Deptno; v END IF; v SELECT Count(*) INTO p FROM Emp v WHERE Empno = :NEW.Empno; v IF p=0 THEN v INSERT INTO Emp(Empno,Ename,Deptno) VALUES(:NEW.Empno, :NEW.Ename, :NEW.Deptno); v ELSE v UPDATE Emp SET Ename = :NEW.Ename v WHERE Empno = :NEW.Empno; v END IF; v END;

52 52 SZB, L.Banachowski Wyzwalacze systemowe v CREATE [OR REPLACE] TRIGGER nazwa_wyzwalacza [BEFORE|AFTER|INSTEAD OF] [zdarzenie_bazodanowe|zdarzenie_DDL] ON [DATABASE|SCHEMA] blok_PL/SQL v gdzie zdarzenie_bazodanowe: SERVERERROR, LOGON, LOGOFF, STARTUP lub SHUTDOWN, v zdarzenie_DDL to nazwa instrukcji DDL a więc na przykład: CREATE, ALTER, DROP, GRANT, REVOKE.

53 53 SZB, L.Banachowski Dynamiczny SQL v Gdy w chwili kompilacji nie znamy pełnej postaci instrukcji SQL w tym instrukcji DDL. Szczegóły mogą być ustalane w trakcie działania programu, jak np. z której tabeli wyświetlić wiersze lub którą tabelę usunąć.

54 54 SZB, L.Banachowski Naturalny dynamiczny SQL (PL/SQL) v EXECUTE IMMEDIATE instrukcja_SQL [USING lista_parametrów_wiązania ]; v Zmienne kursorowe: OPEN cursor FOR sql_stmt [USING lista_parametrów_wiązania ];

55 55 SZB, L.Banachowski Przykład 1 DECLARE sql_stmt VARCHAR2(100); my_deptno NUMBER(2) := 50; my_dname VARCHAR2(15) := 'PERSON'; my_loc VARCHAR2(15) := 'DALLAS'; emp_rec emp%ROWTYPE; BEGIN sql_stmt := 'INSERT INTO Dept VALUES (:1, :2, :3)'; EXECUTE IMMEDIATE sql_stmt USING my_deptno, my_dname, my_loc; sql_stmt := 'SELECT * FROM Emp WHERE Empno = :id'; EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING 7788; EXECUTE IMMEDIATE 'DELETE FROM Dept WHERE Deptno = :n' USING my_deptno; EXECUTE IMMEDIATE 'CREATE TABLE Bonus (Id NUMBER, Am NUMBER)'; END;

56 56 SZB, L.Banachowski Przykład 2 - SELECT DECLARE TYPE EmpCurTyp IS REF CURSOR; emp_cv EmpCurTyp; emp_rec emp%ROWTYPE; sql_stmt VARCHAR2(100); my_job VARCHAR2(15) := 'CLERK'; BEGIN sql_stmt := 'SELECT * FROM Emp WHERE Job = :j'; OPEN emp_cv FOR sql_stmt USING my_job; LOOP FETCH emp_cv INTO emp_rec; EXIT WHEN emp_cv%NOTFOUND; process record END LOOP; CLOSE emp_cv; END;

57 57 SZB, L.Banachowski Zapytania retrospektywne – flashback queries v Możliwość wyświetlania danych według stanu bazy danych z przeszłości. v Ograniczone możliwością odtworzenia danych przy użyciu dziennika wycofań – miejsca w nim są cyklicznie nadpisywane. v Przydatne przy analizie danych. v Przydatne gdy błędnie wprowadziliśmy, zmieniliśmy lub usunęliśmy dane.

58 58 SZB, L.Banachowski Przykład Wyświetl dane z przed godziny SELECT * FROM Emp AS OF Timestamp(Sysdate-1/24);


Pobierz ppt "1 SZB, L.Banachowski SQL - język relacyjnych i obiektowo- relacyjnych baz danych Zaawansowane cechy Wyk ł ad 3."

Podobne prezentacje


Reklamy Google