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;

Podobne dokumenty