Rozdzia 11 Procedury wyzwalane triggery c 1999 Instytut

  • Slides: 9
Download presentation
Rozdział 11: Procedury wyzwalane (triggery) (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Rozdział 11: Procedury wyzwalane (triggery) (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Procedura wyzwalana • procedura wyzwalana (ang. trigger) reaguje na zdarzenia zachodzące w bazie danych

Procedura wyzwalana • procedura wyzwalana (ang. trigger) reaguje na zdarzenia zachodzące w bazie danych • typy procedur wyzwalanych: – BEFORE - uruchamiane przed wykonaniem polecenia INSERT, UPDATE, DELETE – AFTER - uruchamiane po wykonaniu polecenia INSERT, UPDATE, DELETE – FOR EACH ROW - uruchamiane dla każdej krotki, której dotyczy polecenie DML - poziom krotki – uruchamiane jednorazowo dla polecenia DML (niezależnie od liczby krotek, której ono dotyczy) poziom relacji (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Definiowanie procedury wyzwalanej CREATE OR REPLACE TRIGGER test AFTER DELETE ON pracownicy BEGIN /*

Definiowanie procedury wyzwalanej CREATE OR REPLACE TRIGGER test AFTER DELETE ON pracownicy BEGIN /* ciało procedury wyzwalanej */ dbms_output. put_line('Krotka relacji została usunięta); END; (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Definiowanie procedury wyzwalanej cd. • Dla procedur wyzwalanych uruchamianych na skutek uaktualnienia krotek, możemy

Definiowanie procedury wyzwalanej cd. • Dla procedur wyzwalanych uruchamianych na skutek uaktualnienia krotek, możemy określić listę atrybutów relacji, których uaktualnienie uruchomi procedurę. Jeśli nie podamy listy atrybutów, procedura będzie uruchamiana w wyniku uaktualnienia dowolnego spośród atrybutów relacji. CREATE OR REPLACE TRIGGER test AFTER UPDATE OF placa_pod, id_zesp ON pracownicy. . . • Ta sama procedura może być uruchomiona przez każde spośród trzech poleceń DML (tj. INSERT, UPDATE, DELETE) lub ich dowolną kombinację. CREATE OR REPLACE TRIGGER test AFTER INSERT OR UPDATE OR DELETE ON pracownicy. . . (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Klauzula FOR EACH ROW i WHEN CREATE OR REPLACE TRIGGER test BEFORE UPDATE ON

Klauzula FOR EACH ROW i WHEN CREATE OR REPLACE TRIGGER test BEFORE UPDATE ON pracownicy FOR EACH ROW WHEN (OLD. placa_dod < 100) BEGIN. . . END; • w klauzuli WHEN można stosować operatory: matematyczne, SQL i logiczne, np. (OLD. placa_dod >30 AND OLD. placa_pod <100) • wartości atrybutów testujemy w następujący sposób: IF : NEW. placa_pod<=100 THEN. . . ; (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Procedury wyzwalane - przykład 1 • zdefiniuj procedurę wyzwalaną nadającą nowemu pracownikowi kolejny numer

Procedury wyzwalane - przykład 1 • zdefiniuj procedurę wyzwalaną nadającą nowemu pracownikowi kolejny numer - pobierany z licznika create or replace trigger generuj_numer before insert on pracownicy for each row begin if : new. id_prac is null then select seq_pracownik. nextval into : new. id_prac from dual; end if; end; (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Procedury wyzwalane - przykład 2 • zdefiniuj procedurę wyzwalaną, która uniemożliwi zmniejszanie płacy podstawowej

Procedury wyzwalane - przykład 2 • zdefiniuj procedurę wyzwalaną, która uniemożliwi zmniejszanie płacy podstawowej pracowników (do wyświetlania stosownego komunikatu skorzystaj z procedury raise_application_error). create trigger polityka_placowa before update of placa_pod on pracownicy for each row when (new. placa_pod < old. placa_pod) begin raise_application_error (-25000, 'Niebezpieczeństwo strajku'); end polityka_placowa; (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Zablokowanie i odblokowanie procedury wyzwalanej • Każda procedura wyzwalana może być w jednym z

Zablokowanie i odblokowanie procedury wyzwalanej • Każda procedura wyzwalana może być w jednym z dwóch stanów: odblokowania lub zablokowania. Do zablokowania (odblokowania) pojedynczej procedury wyzwalanej służy polecenie: ALTER TRIGGER nazwa DISABLE [ENABLE]; • Wszystkie procedury wyzwalane związane z daną relacją można zablokować (odblokować) pojedynczym poleceniem: ALTER TABLE nazwa_relacji DISABLE [ENABLE] ALL TRIGGERS; (c) 1999, Instytut Informatyki Politechniki Poznańskiej

Usuwanie procedury wyzwalanej DROP TRIGGER nazwa; Słownik bazy danych • informacje dotyczące procedur wyzwalanych

Usuwanie procedury wyzwalanej DROP TRIGGER nazwa; Słownik bazy danych • informacje dotyczące procedur wyzwalanych zdefiniowanych przez użytkownika można wyświetlić korzystając z perspektywy systemowej o nazwie USER_TRIGGERS (c) 1999, Instytut Informatyki Politechniki Poznańskiej