Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Podobne dokumenty
Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

1. Wyzwalacze BD (ang. triggers)

PODSTAWY BAZ DANYCH 13. PL/SQL

Oracle PL/SQL. Paweł Rajba.

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Wyzwalacze TWORZENIE WYZWALACZY

Plan wykładu BAZY DANYCH II WYKŁAD 8. Wyzwalacze. Wyzwalacze

Bazy danych, 4. wiczenia

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Cele. Definiowanie wyzwalaczy

Zaawansowane bazy danych i hurtownie danych semestr I

BAZY DANYCH W APLIKACJACH SIECIOWYCH

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Język PL/SQL Procedury i funkcje składowane

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Procedury i funkcje składowane

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Aspekty aktywne baz danych

Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Pakiety podprogramów Dynamiczny SQL

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

BAZA DANYCH SIECI HOTELI

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Administracja i programowanie pod Microsoft SQL Server 2000

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Język SQL. Rozdział 8. Język manipulowania danymi DML

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Widok Connections po utworzeniu połączenia. Obszar roboczy

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze

SQL> startup pfile=./admin/pfile/initdbx.ora. SQL> create spfile from pfile='$home/admin/pfile/initdbx.ora' create user bolek identified by bolek;

Hurtownia Świętego Mikołaja projekt bazy danych

Bloki anonimowe w PL/SQL

Bazy danych - Materiały do laboratoriów VIII

Indeksy. Indeks typu B drzewo

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Bazy Danych i Usługi Sieciowe

ACESS- zadania z wykorzystaniem poleceń SQL

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Język PL/SQL. Rozdział 2. Kursory

Bazy danych i usługi sieciowe

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Język PL/SQL Pakiety podprogramów

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

PL/SQL. Zaawansowane tematy PL/SQL

SQL 4 Structured Query Lenguage

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Deklarowanie kursora

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Wyzwalacze (triggery) Przykład

DECLARE VARIABLE zmienna1 typ danych; BEGIN

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Język SQL. Rozdział 2. Proste zapytania

Oracle PL/SQL. Paweł Rajba.

15. Funkcje i procedury składowane PL/SQL

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Struktura bazy danych

Modelowanie wymiarów

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Składowane procedury i funkcje

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

IMPLEMENTACJA ASERCJI W RELACYJNYCH BAZACH DANYCH NA PRZYKŁADZIE SYSTEMU ORACLE

Uprawnienia, role, synonimy

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Systemowe aspekty baz

Typy Oracle atrybutów relacji Typ NUMBER (1)

Typy Oracle atrybutów relacji Typ NUMBER (1)

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

PL/SQL co, gdzie i dlaczego?

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. zadania

Obiektowe bazy danych

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

Transkrypt:

Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami 1

Procedury wyzwalane Procedura wyzwalana (ang. trigger) to program w języku PL/SQL (również Java lub C) który reaguje na zdarzenia zachodzące w bazie danych i wykonuje się po zajściu określonych warunków. Typy procedur wyzwalanych: BEFORE - uruchamiane przed wykonaniem polecenia INSERT, UPDATE, DELETE AFTER - uruchamiane po wykonaniu polecenia INSERT, UPDATE, DELETE INSTEAD OF uruchamiane zamiast polecenia INSERT, UPDATE, DELETE systemowe uruchamiane po zajściu określonego zdarzenia w schemacie lub bazie danych 2

Cele stosowania procedur wyzwalanych Zaawansowane śledzenie użytkowników Ochrona przed nieprawidłowymi transakcjami Wymuszanie więzów referencyjnych (albo więzów nie wspieranych przez deklaratywne więzy integralnościowe albo więzów między węzłami rozproszonej bazy danych) Wymuszanie złożonych reguł biznesowych Wymuszanie złożonych polityk bezpieczeństwa Zapewnianie przezroczystego zapisu wydarzeń Wypełnianie atrybutów wartościami domyślnymi Modyfikacja złożonych perspektyw Śledzenie wydarzeń systemowych 3

Definiowanie procedury wyzwalanej CREATE [OR [OR REPLACE] TRIGGER nazwa {{ BEFORE AFTER INSTEAD OF OF }} {{ INSERT UPDATE DELETE }} ON ON {{ tabela perspektywa }} [[ WHEN warunek ]] [[ FOR EACH ROW] [[ DECLARE /* /* deklaracje zmiennych i i kursorów */ */]] BEGIN /* /* ciało procedury wyzwalanej */ */ END; INSTEAD OF: wyzwalacz może być zdefiniowany tylko na perspektywie WHEN: wyzwalacz wykonuje się tylko dla tych krotek, dla których jest spełniony warunek FOR EACH ROW: wyzwalacz wykonuje się dla każdej modyfikowanej krotki 4

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ę. CREATE OR OR REPLACE TRIGGER test test AFTER UPDATE OF OF placa_pod, id_zesp ON ON pracownicy...... Ta sama procedura może być wrażliwa na kombinację instrukcji DML (tj. INSERT, UPDATE, DELETE). (niezgodne ze standardem) CREATE OR OR REPLACE TRIGGER test test AFTER INSERT OR OR UPDATE OR OR DELETE ON ON pracownicy BEGIN IF IF INSERTING THEN...... ELSIF UPDATING THEN...... END IF; IF; END; 5

Klauzula FOR EACH ROW i WHEN CREATE OR OR REPLACE TRIGGER test test BEFORE UPDATE ON ON pracownicy FOR EACH ROW WHEN (OLD.placa_dod < 100) 100) BEGIN IF IF (:NEW.placa_pod <= <= 100) 100) THEN...... END IF; IF; IF IF (:NEW.etat!=!=:OLD.etat) THEN...... END IF; IF; END; w klauzuli WHEN i ciele wyzwalacza FOR EACH ROW można uzyskać dostęp do starej i nowej wartości atrybutu domyślnie stara i nowa wersja rekordu są dostępne przez nazwy OLD i NEW (w ciele wyzwalacza poprzedzane dwukropkiem), można to zmienić za pomocą klauzuli REFERENCING NEW AS n dla instrukcji INSERT stara wartość jest pusta, dla instrukcji DELETE nowa wartość jest pusta 6

Przykład procedury wyzwalanej (1) Poniższa procedura wyzwalana uruchamia się przed wstawieniem nowego pracownika i nadaje mu kolejny identyfikator pobierany z licznika (sekwencji) CREATE OR OR REPLACE TRIGGER trig_id_prac BEFORE INSERT ON ON pracownicy FOR EACH ROW BEGIN IF IF (:NEW.id_prac IS IS NULL) THEN SELECT seq_pracownik.nextval INTO :NEW.id_prac FROM DUAL; END IF; IF; END; 7

Przykład procedury wyzwalanej (2) Poniższa procedura sprawdza, czy płaca przyznana asystentowi nie przekracza widełek płacowych dla asystenta. CREATE OR OR REPLACE TRIGGER trig_placa_asystenta BEFORE UPDATE OF OF placa_pod ON ON pracownicy FOR FOR EACH EACH ROW ROW WHEN WHEN (( NEW.ETAT = 'ASYSTENT' )) DECLARE v_max v_max NUMBER; v_min v_min NUMBER; BEGIN BEGIN SELECT placa_min, placa_max INTO INTO v_min, v_min, v_max v_max FROM FROM etaty etaty WHERE nazwa nazwa = :NEW.etat; IF IF :NEW.placa_pod NOT NOT BETWEEN v_min v_min AND AND v_max v_max THEN THEN RAISE_APPLICATION_ERROR(-20001,'Za wysoka placa'); END END IF; IF; END; END; 8

Przykład procedury wyzwalanej (3) Procedura wpisuje do tabeli HISTORY datę utworzenia, typ i nazwę każdego obiektu tworzonego wewnątrz bieżącego schematu. CREATE TABLE HISTORY (( CR_DATE DATE, DATE, CR_OBJECT VARCHAR2(50), CR_NAME VARCHAR2(50) ); ); CREATE OR OR REPLACE TRIGGER TR_SCHEMA AFTER AFTER CREATE ON ON SCHEMA BEGIN BEGIN INSERT INTO INTO HISTORY(CR_DATE,CR_OBJECT,CR_NAME) VALUES (SYSDATE,ORA_DICT_OBJ_TYPE,ORA_DICT_OBJ_NAME); END; END; 9

Procedura wyzwalana INSTEAD OF Pozwala na zapewnianie modyfikowalności złożonych perspektyw. CREATE OR OR REPLACE VIEW zesp_count AS AS SELECT z.nazwa, count(*) AS AS pracownicy FROM pracownicy p, p, zespoly z WHERE z.id_zesp = p.id_zesp GROUP BY BY z.nazwa; CREATE OR OR REPLACE TRIGGER trig_instead INSTEAD OF OF INSERT ON ON zesp_count BEGIN INSERT INTO zespoly(id_zesp,nazwa,adres) VALUES(80,:NEW.nazwa,NULL); END; 10

Zarządzanie procedurami wyzwalanymi Wszystkie procedury wyzwalane związane z daną relacją można zablokować (odblokować) pojedynczym poleceniem: ALTER TABLE nazwa_relacji DISABLE [ENABLE] ALL ALL TRIGGERS; 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]; Do usunięcie wyzwalacza służy polecenie DROP TRIGGER nazwa; 11

Słownik bazy danych Informacje o procedurach wyzwalanych użytkownika mieszczą się w perspektywie systemowej USER_TRIGGERS Informacje o zależnościach można podejrzeć w perspektywie słownika bazy danych USER_DEPENDENCIES SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, TABLE_NAME, TRIGGER_BODY FROM USER_TRIGGERS; SELECT NAME, TYPE, REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE REFERENCED_NAME = 'PRACOWNICY'; 12