Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

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

Język PL/SQL Pakiety podprogramów

Pakiety podprogramów Dynamiczny SQL

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

Zaawansowane bazy danych i hurtownie danych semestr I

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Oracle PL/SQL. Paweł Rajba.

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Oracle PL/SQL. Paweł Rajba.

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

1. Wyzwalacze BD (ang. triggers)

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

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

Cele. Definiowanie wyzwalaczy

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

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

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

Procedury i funkcje składowane

PL/SQL. Zaawansowane tematy PL/SQL

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

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

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

Bloki anonimowe w PL/SQL

Bazy danych, 4. wiczenia

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

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

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

15. Funkcje i procedury składowane PL/SQL

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

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

Oracle PL/SQL. Paweł Rajba.

BAZY DANYCH W APLIKACJACH SIECIOWYCH

Oracle11g: Programowanie w PL/SQL

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

Wykład 9. Pakiety w języku PL/SQL

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

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

PL/SQL. Zaawansowane tematy PL/SQL

Wyzwalacze TWORZENIE WYZWALACZY

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

Hurtownia Świętego Mikołaja projekt bazy danych

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

BAZA DANYCH SIECI HOTELI

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

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

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

Oracle10g: Programowanie w PL/SQL

Wyzwalacze (triggery) Przykład

Tworzenie raportów XML Publisher przy użyciu Data Templates

SQL 4 Structured Query Lenguage

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

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

Składowane procedury i funkcje

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

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

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

Administracja i programowanie pod Microsoft SQL Server 2000

Procedury Funkcje Pakiety. Tworzenie procedury

Indeksy. Indeks typu B drzewo

Aspekty aktywne baz danych

Oracle11g: Wprowadzenie do SQL

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

Systemowe aspekty baz

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

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

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

Bloki anonimowe w PL/SQL

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

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

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

CREATE SEQUENCE [schemat_użytkownika.]nazwa_sekwencji zestaw_parametrów_sekwencji ;

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

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

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

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

Bazy danych programowanie Wykład dla studentów matematyk

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

BAZY DANYCH Cz III. Transakcje, Triggery

Oracle PL/SQL. Paweł Rajba.

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego

Oracle PL/SQL. Paweł Rajba.

Bazy danych 10. SQL Widoki

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

Tabele wykorzystywane w przykładach

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

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Relacyjne bazy danych. Podstawy SQL

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Transkrypt:

Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych i zapewnienie, aby dane przechowywane w bazie były zgodne z regułami narzuconymi przed projektanta bazy. Każdy wyzwalacz jest związany z określoną tabelą (lub widokiem) i jest uruchamiany w następstwie zajścia jednego z trzech zdarzeń: wywołanie instrukcji INSERT, UPDATE lub DELETE dla danej tabeli (widoku). Dodatkowo, można określić kiedy wyzwalacz ma zostać uruchomiony: przed zdarzeniem (wyzwalacz typu BEFORE), po zdarzeniu (AFTER) lub zamiast zdarzenia (INSTEAD OF) (ten typ wyzwalaczy stosujemy do widoków). W bazach danych Oracle mamy dwa rodzaje wyzwalaczy: wierszowe (które definiujemy za pomocą klauzuli FOR EACH ROW) oraz obiektowe.

Składnia instrukcji tworzacej wyzwalacz CREATE OR REPLACE TRIGGER nazwa BEFORE / AFTER / INSTEAD OF INSERT / UPDATE / DELETE OR dodatkowe zdarzenie ON tabela/widok FOR EACH ROW ciało wyzwalacza Jeden wyzwalacz może zostać zdefiniowany dla kilku zdarzeń, np. aby zdefiniować wyzwalacz wierszowy dla tabeli employee, wywoływany po instrukcji UPDATE lub INSERT, użyjemy składni: CREATE OR REPLACE TRIGGER nowy AFTER INSERT OR UPDATE ON employee FOR EACH ROW...

Za pomocą wyzwalaczy można zrealizować wiele istotnych, z punktu widzenia integralności i bezpieczeństwa danych, zadań, m.in. zapewnienie integralności danych; sprawdzanie reguł poprawności wstawianych (modyfikowanych) danych; logowanie zdarzeń w systemie; można stworzyć własną tabelę z logami, a następnie wyzwalacze, które będą do tej tabeli wstawiać kolejne wiersze w odpowiedzi na działania na obiektach bazy danych; modyfikowanie danych, które mają zostać wstawione do tabeli (np. odpowiednie formatowanie) przed ich umieszczeniem w tabeli

Kwalifikatory new i old w wyzwalaczach wierszowych W ciele wyzwalacza można korzystać ze wszystkich instrukcji, które są dostępne dla procedur zapamiętanych. W wyzwalaczach wierszowych mamy dodatkowo dostępne dwa kwalifikatory new oraz old, które pozwalają odwoływać się odpowiednio do nowych lub poprzednich wartości pól wstawianego lub usuwanego czy modyfikowanego wiersza. Uwaga. Dla wyzwalaczy uruchamianych w następstwie wykonania instrukcji INSERT mamy dostępne tylko wartości new, dla wyzwalaczy dla DELETE tylko wartości old, natomiast w przypadku zdarzenia UPDATE dostępne są obie wartości. Dla przykładu, jeżeli mamy zdefiniowany wyzwalacz wierszowy dla tabeli employee, dla zdarzenia UPDATE, to aby odwołać się do poprzedniej wartości zarobków w modyfikowanym wierszu, należy użyć składni :old.salary, natomiast aby odczytać nową wartość zarobków, należy użyć odwołania :new.salary.

Uwaga. W ciele wyzwalacza nie może być instrukcji, które modyfikują strukturę tabeli, na którą nałożony jest wyzwalacz; modyfikują dane w tabeli, dla której zdefiniowany jest dany wyzwalacz; wpływają na transakcję; odowłują się do podprogramów (procedur, funkcji), które zawierają takie instrukcje.

Stosowanie predykatów INSERTING, UPDATING, DELETING Czasem wygodnie jest mieć wyzwalacz, który jest wywoływany w odpowiedzi na zajście więcej niż jednego ze zdarzeń INSERT, UPDATE, DELETE. Jeżeli mamy taki wyzwalacz, to musimy mieć możliwość sprawdzić, które zdarzenie wywołało ten wyzwalacz. W tym celu można użyć predykatów INSERTING, UPDATING, DELETING. Predykatów można użyć np. w warunku instrukcji IF, aby móc wykonać różne operacje, w zależności od tego, jaka instrukcja została wykonana.

Zarzadzanie wyzwalaczami Do usuwania wyzwalaczy służy instrukcja DROP TRIGGER nazwa. Często nie chcemy usuwać wyzwalacza, a jedynie go czasowo dezaktywować (wyzwalacze wydłużają czas wykonywania modyfikacji, jeżeli planujemy przeprowadzić dużą liczbę instrukcji DML, aby przyspieszyć działanie, można przedtem wyłączyć pewne wyzwalacze). Wyzwalacz wyłączamy instrukcją ALTER TRIGGER nazwa DISABLE. Aby ponownie aktywować wyzwalacz, należy użyć instrukcji ALTER TRIGGER nazwa ENABLE. Dla jednej tabeli może być zdefiniowanych kilka wyzwalaczy tego samego typu. Są one wówczas uruchamiane sekwencyjnie.

Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą się deklaracje typów, zmiennych, stałych, kursorów, wyjątków i podprogramów. W ciele mieści się implementacja specyfikacji. Specyfikacja i ciało pakietu są oddzielnie przechowywane w słowniku danych.

Pakiety umożliwiają: 1 przechowywanie powiązanych ze sobą obiektów w jednym miejscu, 2 grupowanie logicznej funkcjonalności, 3 łatwe projektowanie aplikacji: kodowanie i kompilacja oddzielnie specyfikacji i ciała, 4 ukrywanie informacji: tylko deklaracje w specyfikacji są jawne i dostępne dla aplikacji, prywatne deklaracje w ciele pakietu są ukryte, kod jest ukryty w ciele pakietu.

Zalety pakietów: zwiększenie wydajności (przy pierwszym odwołaniu do pakietu cała jego zawartość jest ładowana do pamięci), dodatkowa funkcjonalność udostępniają zmienne globalne, umożliwiają przeciążanie procedur i funkcji, ukrycie informacji użytkownikowi jest udostępniana tylko specyfikacja pakietu (interfejs), natomiast implementacja procedur i funkcji jest niewidoczna,

Definiowanie pakietu Specyfikacja: CREATE OR REPLACE PACKAGE nazwa_pakietu IS deklaracje typów, stałych, zmiennych, kursorów i wyjątków dostępnych na zewnątrz pakietu deklaracje funkcji i procedur END; Ciało: CREATE OR REPLACE PACKAGE BODY nazwa_pakietu IS deklaracje lokalnych typów, zmiennych, stałych, wyjatków i kursorów definicje procedur i funkcji BEGIN części inicjalizacyjna pakietu END;

Każda deklaracja funkcji i procedury ze specyfikacji pakietu musi mieć odzwierciedlenie w ciele, specyfikacja procedur i funkcji w obu częściach pakietu musi być dokładnie taka sama jeśli chodzi o nazwę podprogramu, nazwy parametrów i ich typy. Zmienne i kursory mogą być inicjalizowane w części inicjalizacyjnej pakietu.

Przykład (z dokumentacji Oracle) Specyfikacja: CREATE OR REPLACE PACKAGE emp_actions IS TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL); CURSOR desc_salary RETURN EmpRecTyp; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER); PROCEDURE fire_employee (emp_id NUMBER); END;

Ciało: CREATE OR REPLACE PACKAGE BODY emp_actions IS CURSOR desc_salary RETURN EmpRecTyp IS SELECT empno, sal FROM emp ORDER BY sal DESC; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER) IS BEGIN INSERT INTO emp VALUES (empno_seq.nextval, ename, job, mgr, SYSDATE, sal, comm, deptno); END; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM emp WHERE empno = emp_id; END; END;

Odwołanie do funkcji/procedury zawartej w pakiecie należy poprzedzić nazwą pakietu, o ile odwołujemy się do danej funkcji/procedury z zewnątrz pakietu, np. EXECUTE emp_actions.fire_employee(2); Kompilowanie pakietu: ALTER PACKAGE nazwa COMPILE PACKAGE PACKAGE BODY; Usuwanie pakietu: DROP PACKAGE PACKAGE BODY nazwa;

Użycie pakietów do deklarowania zmiennych globalnych Jeżeli specyfikacja pakietu nie zawiera deklaracji kursorów ani podprogramów, a jedynie typy, stałe, zmienne i wyjątki, wówczas nie ma konieczności tworzenia ciała pakietu, jak w poniższym przykładzie (z dokumentacji Oracle): CREATE PACKAGE trans_data IS TYPE TimeRec IS RECORD ( minutes SMALLINT, hours SMALLINT); TYPE TransRec IS RECORD ( category VARCHAR2, account INT, amount REAL, time_of TimeRec); minimum_balance CONSTANT REAL := 10.00; number_processed INT; insufficient_funds EXCEPTION; END; Tego typu pakiet umożliwia zdefiniowanie zmiennych globalnych, do których można się odwoływać z podprogramów oraz wyzwalaczy, w obrębie danej sesji.

Przeciażanie podprogramów z pakietów W pakiecie mogą znajdować się funkcje lub procedury o takiej samej nazwie, ale w wersjach z różnymi parametrami, Pozwala to na stosowanie tych samych operacji do różnych typów obiektów, Parametry muszą się różnić w liczbie, kolejności lub typie, Nie można utworzyć dwóch podprogramów o tej samej nazwie, jeśli ich parametry różnią się tylko nazwą lub trybem (IN, OUT czy IN OUT). Nie można utworzyć dwóch funkcji jeśli różnią się tylko typem zwracanej wartości. np. CREATE OR REPLACE PACKAGE pracownik IS FUNCTION srednia_zarobkow(id_dzialu NUMBER) RETURN NUMBER; FUNCTION srednia_zarobkow(id_dzialu NUMBER, id_managera NUMBER) RETURN NUMBER; END;