Pakiety, wyzwalacze
Transkrypt
Pakiety, wyzwalacze
Studia dzienne Systemy przetwarzania i baz danych II Pracownia specjalistyczna nr 7 Temat: Pakiety, wyzwalacze Zad 1 Stworzy pakiet zawieraj cy dwie procedury, jedn dodaj c ksi k do bazy (isbn parametr OUT, tytul, cena itd. parametry IN), drug usuwaj c ksi k (isbn parametr procedury) z bazy. Nale y obsłu y tak e ewentualne wyj tki, które mog wyst pi : a) naruszenie unikalno ci klucza głównego – wyj tek predefiniowany DUP_VAL_ON_INDEX b) wstawiane dane s niepoprawne (niepoprawne typy) – wy tek predefiniowany ROWTYPE_MISMATCH c) naruszenie wi zów integralno ci (klucz główny jest w innej tabeli kluczem obcym bez opcji ON DELETE CASCADE) – sprawdzi numer bł du, wykorzystuj c PRAGMA EXCEPTION_INIT () doda własn obsług tego wyj tku. Zad 2 Utworzy pakiet, w skład którego wchodzi b d nast puj ce obiekty: a) zmienna globalna g_liczba_zamowien; b) procedura, która b dzie dopisywa rekord do tabeli t_klient. Parametry wej ciowe procedury powinny stanowi warto ci kolumn dodawanego rekordu. c) funkcja, która zwróci liczb zamówie danego klienta d) funkcja, która zwróci liczb niezrealizowanych zamówie z dnia bie cego Zad 3 Napisa wyzwalacz, który b dzie aktywowany przed wykonaniem polecenia modyfikacji rekordów pola zrealizowane tabeli t_zamowienie. Wyzwalacz powinien modyfikowa pole „data_wys” tabeli t_z_ksiazka na date dzisiejsza, jesli now warto ci zrealizowane jest 'TAK'. Zad 4 Stworzy wyzwalacz, który przy modyfikacji ceny w tabeli t_ksiazka: je li nowa cena jest wi ksza o co najmniej 10% ceny wyj ciowej, to powinien si pojawi odpowiedni komunikat (o tytule i o za du ej podwy ce), a cena powinna pozosta bez zmian. Pomoc PAKIETY Pakiet - konstrukcja, która umo liwia wspólne składowanie skojarzonych ze sob obiektów. Składa si z dwóch oddzienych cz ci: specyfikacji i tre ci. Tworzenie pakietu Specyfikacja pakietu (nagłówek pakietu) zawiera informacje dotycz ce zawarto ci pakietu. Nie zawiera kodu dla adnej procedury. CREATE OR REPLACE PACKAGE nazwa_pakietu AS deklaracje publiczne specyfikacje podprogramów END; Tre pakietu zawiera kod odpowiadaj cy deklaracji wyprzedzaj cej podprogramu w nagłówku pakietu. Kompilacja tre ci si nie powiedzie, je li nagłówek pakietu nie zostanie wcze niej pomy lnie skompilowany. CREATE OR REPLACE PACKAGE BODY nazwa_pakietu AS deklaracje prywatne definicje podprogramów [BEGIN instrukcje inicjalizuj ce pakietu] END; Przykład: CREATE OR REPLACE PACKAGE nazwa_p AS function nazwa_f (j number) return number; zmienne globalne; END; CREATE OR REPLACE PACKAGE BODY nazwa_p AS function nazwa_f (j number) return number IS ............. END; END; Odwoływanie si do zmienych (funkcji) zadeklarowanych w pakiecie: nazwa_pakietu.nazwa_zmiennej; Uruchamianie: EXECUTE nazwa_pakietu.nazwa_proc[(..)]; lub BEGIN nazwa_pakietu.nazwa_proc[(..)]; END; Usuwanie pakietu: DROP PACKAGE nazwa_pakietu; WYZWALACZE Procedury składowane w bazie danych, automatycznie uruchamiane przez system przy wyst pieniu okre lonego zdarzenia w bazie danych: - Wyzwalacze wierszowe: akcja wykonywana jest tyle razy, ile jest wierszy, których dotyczy polecenie aktywuj ce wyzwalacz - Wyzwalacze poleceniowe: akcja wykonywana jest tylko jeden raz, niezale nie od liczby wierszy, których dotyczy polecenie aktywuj ce wyzwalacz Tworzenie wyzwalaczy: CREATE OR REPLACE TRIGGER nazwa_wyzwalacza { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [ OF kolumna, [, kolumna ] … ] } [ OR { DELETE | INSERT | UPDATE [ OF kolumna, [, kolumna ] … ] } ] ON tabela [ FOR EACH ROW [ WHEN (warunek) ] ] blok pl/sql Identyfikatory korelacji :new, :old Kompilator traktuje je jako rekordy typu: tabela%ROWTYPE. Mo na si odwoływa do poszczehólnych kolumn przez: :new.nazwa_kol :old.nazwa_kol :new – DELETE - jest nieokre lone – INSERT – warto ci, które b d wstawione po wykonaniu instrukcji – UPDATE – nowe warto ci, które b d uaktualnione po wykonaniu instrukcji :old - DELETE – oryginalne warto ci prze usunieciem wiersza - INSERT – nieokreslone - UPDATE – oryginalne warto ci wiersza przed uaktualnieniem Czas wykonania wyzwalacza: - BEFORE – mo na zmienia warto ci :new - AFTER - nie mo na zmienia wartosci :new Wykrywanie rodzaju instrukcji INSERTING = TRUE, je eli instrukcj wyzwalajac jest INSERT DELETING = TRUE, je eli instrukcj wyzwalajac jest DELETE UPDATING= TRUE, je eli instrukcj wyzwalajac jest UPDATE Wł czanie i wył czanie wyzwalacza ALTER TRIGGER nazwa_wyzwalacza { ENABLE | DISABLE} Usuwanie wyzwalacza DROP TRIGGER nazwa_wyzwalacza; Dodatkowe informacje: http://www-rohan.sdsu.edu/doc/oracle/server803/A54647_01/ch4h.htm Przykład: CREATE OR REPLACE TRIGGER trig_wydawca BEFORE UPDATE OF id_wydawcy ON t_wydawca FOR EACH ROW BEGIN UPDATE t_ksiazka SET wydawca = :new.id_wydawcy WHERE wydawca = :old.id_wydawcy; END;