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



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

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

1. Wyzwalacze BD (ang. triggers)

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

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

Oracle PL/SQL. Paweł Rajba.

Wyzwalacze TWORZENIE WYZWALACZY

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

Bazy danych - Materiały do laboratoriów VIII

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

Cele. Definiowanie wyzwalaczy

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Pakiety podprogramów Dynamiczny SQL

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

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

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

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

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

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

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

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

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

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

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

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Oracle11g: Programowanie w PL/SQL

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

Hurtownia Świętego Mikołaja projekt bazy danych

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

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

Wykład 5. SQL praca z tabelami 2

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

Systemowe aspekty baz

Wyzwalacze (triggery) Przykład

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

BAZA DANYCH SIECI HOTELI

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Aspekty aktywne baz danych

Procedury i funkcje składowane

Składowane procedury i funkcje

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

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

Wykład 8. SQL praca z tabelami 5

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

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

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

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

Bloki anonimowe w PL/SQL

Oracle10g: Programowanie w PL/SQL

Indeksy. Indeks typu B drzewo

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

P o d s t a w y j ę z y k a S Q L

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

SQL 4 Structured Query Lenguage

Uprawnienia, role, synonimy

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Zaawansowane bazy danych i hurtownie danych semestr I, st. niestacjonarne

Bazy Danych i Usługi Sieciowe

15. Funkcje i procedury składowane PL/SQL

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Systemowe aspekty baz danych

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

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

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

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

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

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych, 4. wiczenia

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

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

Bazy danych 10. SQL Widoki

Bazy danych i usługi sieciowe

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

Autor: Joanna Karwowska

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Dr inż. Paweł Kasprowski

Deklarowanie kursora

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

SQL język zapytań (query language) cz.1

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Technologie baz danych WYKŁAD 7: Wyjątki

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

SQL :: Data Definition Language

BAZY DANYCH Cz III. Transakcje, Triggery

Transkrypt:

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie warunku ( Condiion ) określenie akcji ( Action ) Zastosowanie wyzwalaczy: automatyczne generowanie wartości zapewnienie niestandardowych więzów integralności, realizacja złożonej logiki biznesowej prowadzenie statystyk, monitorowanie działań użytkowników zapewnienie dodatkowych reguł bezpieczeństwa modyfikacja danych poprzez złożone perspektywy Typy wyzwalaczy: DML reagujące na polecenia INSERT, UPDATE, DELETE zastępujące zamiast wykonania instrukcji ( INSTEAD OF ) systemowe -uruchamiane w wyniku zajścia zdarzenia systemowego przed wykonaniem instrukcji ( BEFORE ) po wykonaniu instrukcji ( AFTER ) składnia: CREATE OR REPLACE TRIGGER [ < schemat. > ] < nazwa > { BEFORE AFTER INSTEAD OF } { < zdarzenie_dml > [ OR < zdarzenie_dml> ]... { < zdarzenie_ddl > [ OR < zdarzenie_ddl > ].. < zdarzenie_systemowe > [OR < zdarzenie_systemowe > ]... } ON { [ <schemat. > SCHEMA DATABE } } [ WHEN ( < warunek_logiczny > ) ] { < blok_pl/sql > < wywołanie_procedury >} Dostępne opcje składni zależą od typu wyzwalacza - Opis zdarzenia DML { DELETE INSERT UPDATE [ OR < nazwa_kol1 > [, < nazwa_kol2 > ]... } [ OR { DELETE INSERT UPDATE [ OF < nazwa_kol1 [, < nazwa_kol2 > ]... ] } ]... ON { [ < schemat. > < nazwa_tabeli > [ < schemat. > < nazwa_perspektywy > } [ ] Użycie klauzuli oznacza, typ wyzwalacza na poziomie wierszy; wykonują się raz dla każdego wiersza, którego dotyczy polecenie DML W innym przypadku jest to wyzwalacz poziomu instrukcji 1

przykłady: CREATE OR REPLACE TRIGGER zmiana_premii AFTER UPDATE OF premia ON Pracownicy INSERT INTO Dziennik VALUES (' Pracownicy', Current_date, User, ' zmiana premii' ); W wyzwalaczu można uzyskać dostęp do danych ( atrybutów ) przetwarzanego wiersza. Służą do tego dwa identyfikatory korelacji - :old, :new. Identyfikator korelacji to specjalny rodzaj zmiennych powiązanych z tabelą wyzwalającą. Kompilator PL/SQL traktuje je jako rekordy typu tabela_wyzwalająca%rowtype identyfikator :old jest niezdefiniowany dla polecenia INSERT identyfikator :new dla polecenia DELETE. Kompilator PL/SQL nie wygeneruje błędu, jednak wartością pól w obu przypadkach będzie NULL przykłady: CREATE OR REPLACE TRIGGER Poprawa BEFORE INSERT ON Etaty :new.nazwa:= UPPER(:new.nazwa); CREATE OR REPLACE TRIGGER Podwyzki BEFORE UPDATE OF placa ON Pracownicy WHEN (new.etat NOT LIKE 'Dyrektor') IF :new.placa > :old.placa * 1.2 THEN :new.placa := :old.placa * 1.2; CREATE OR REPLACE TRIGGER Kontrola_plac BEFORE INSERT ON Pracownicy DECLARE V_min NUMBER; V_max NUMBER; SELECT placa_min, placa_max INTO V_min, V_max FROM Etaty WHERE nazwa=:new.etat; IF :new.placa NOT BETWEEN V_min AND V_max THEN RAISE_APPLICATION_ERROR( -20001,' Placa niezgodna z etatem'); 2 CREATE OR REPLACE TRIGGER LIMIT_prac

BEFORE INSERT OR UPDATE OF Id_zesp ON Pracownicy DECLARE V_liczba NUMBER; SELECT Count(*) INTO V_liczba FROM Pracownicy WHERE Id_zesp=:new.id_zesp; IF V_liczba >= 5 THEN RAISE_APPLICATION_ERROR(-20025,' Za liczny zespól'); UPDATE Pracownicy SET Id_zesp = 20; SQL Error: ORA-04091: tabela....pracownicy ulega mutacji, wyzwalacz/funkcja może tego nie widzieć ORA-06512: przy "....LIMIT_PRAC", linia 4 CREATE OR REPLACE TRIGGER Kontrola_egzamin AFTER INSERT OR DELETE OR UPDATE ON Egzamin IF INSERTING THEN INSERT INTO Audyt VALUES ( Current_date, 'Wstawiono dane do tabeli Egzamin'); IF DELETING THEN INSERT INTO Audyt VALUES ( Current_date,'Kasowano dane w tabeli Egzamin'); IF UPDATING THEN INSERT INTO Audyt VALUES ( Current_date,'Poprawiano dane w tabeli Egzamin'); Wyzwalacze zastępujące INSTEAD OF stosowane wyłącznie dla perspektyw wykonywane zamiast instrukcji aktywującej wyzwalacz ograniczenia typu CHECK nie są sprawdzane zawsze typu wierszowego CREATE OR REPLACE VIEW Zespoly_pracownicze SELECT nazwa, count(numer) liczba_prac, sum(placa+nvl(dodatek,0)) budzet FROM Pracownicy RIGHT JOIN Zespoly USING( id_zesp) GROUP BY nazwa; CREATE OR REPLACE TRIGGER Mod_Zespoly_pracownicze INSTEAD OF INSERT ON Zespoly_pracownicze INSERT INTO Zespoly VALUES (Numeruj.nexval, :new.nazwa, null); 3

Wyzwalacze systemowe są aktywowane przez zdarzenia zmiany stanu systemu zdarzenia wywołane pracą użytkowników mogą być wywołane dla danego schematu ( jednego użytkownika ), bądź dla całej bazy danych ( dla wszystkich użytkowników ) Zdarzenia DDL i bazy danych BEFORE AFTER ALTER przed/ po zmianie definicji obiektu BEFORE AFTER DROP przed / po usunięciu obiektu BEFORE AFTER CREATE -przed / po utworzeniu obiektu BEFORE AFTER GRANT przed / po nadaniu uprawnień BEFORE AFTER REVOKE przed / po odebraniu uprawnień AFTER LOGON po zalogowaniu BEFORE LOGOFF przed wylogowaniem AFTER STARTUP po otwarciu bazy danych AFTER SERVERERROR po wystąpieniu błędu BEFORE SHUTDOWN przed zatrzymaniem instancji bazy CREATE OR REPLACE TRIGGER Blokada_drop BEFORE DROP ON SCHEMA RAISE_APPLICATION_ERROR ( -20123,' próba usuwania obiektów przez ' user ' numer ' uid ); CREATE OR REPLACE TRIGGER Log_errors AFTER SERVERERROR ON DATABE IF ( IS_SERVERERROR(1017) THEN INSERT INTO sever_audit( Current_timestamp, 'Error 1017'); Ograniczenia stosowania wyzwalaczy nie mogą wykonywać instrukcji DDL nie mogą wykonywać instrukcji kontrolnych COMMIT, ROLLBACK itp. wyzwalacze wierszowe nie mogą modyfikować ani wykonywać zapytania do obiektu, dla którego zostały wywołane w ciele wyzwalacza nie można deklarować zmiennych typu LONG ani LONG RAW wyzwalacze systemowe STARTUP i SHUTDOWN nie mogą mieć żadnych warunków Inne polecenia PL/SQL związane z wyzwalaczami ALTER TRIGGER < nazwa > { DISABLE ENABLE}; DROP TRIGGER < nazwa >; 4

Dynamiczny SQL technika programowania umożliwiająca generowanie instrukcji SQL dynamicznie w trakcie wykonywania kodu źródłowego instrukcja taka jest zapisana w postaci łańcucha znaków wykonanie wewnątrz bloku PL/SQL umożliwia polecenie EXECUTE IMMEDIATE przyklady: CREATE OR REPLACE PROCEDURE Dowolne_polecenie( p_text VARCHAR2 ) EXECUTE IMMEDIATE( p_text ); EXEC Dowolne_polecenie('CREATE TABLE Opis( kol VARCHAR2(30))'); ORA-01031: niewystarczające uprawnienia ORA-06512: przy "STUD_UZUP.DOWOLNE_POLECENIE", linia 4 EXEC Dowolne_polecenie('INSERT INTO Egzamin VALUES (12348,95)'); EXEC Dowolne_polecenie('DROP TABLE Robo'); CREATE OR REPLACE PROCEDURE Kasuj_tabele ( p_nazwa VARCHAR2) EXECUTE IMMEDIATE ' DROP TABLE ' p_nazwa; EXEC Kasuj_tabele( 'AUDYT') Dynamiczny SQL- parametryzacja CREATE OR REPLACE PROCEDURE Dodaj_zespol (p_nazwa VARCHAR2, p_adres VARCHAR2 ) V_id zespoly.id_zesp%type; EXECUTE IMMEDIATE 'SELECT Max(id_zesp) FROM zespoly' INTO V_id ; EXECUTE IMMEDIATE 'INSERT INTO Zespoly VALUES (:1, :2, :3) ' USING V_id + 10, p_nazwa, p_adres; COMMIT; END Dodaj_zespol; Wykorzystano Wykłady dr inż. Olga Siedlecka-Lamch Systemy baz danych z roku 2012 5