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

Podobne dokumenty
Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Oracle PL/SQL. Paweł Rajba.

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

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

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

Cele. Definiowanie wyzwalaczy

1. Wyzwalacze BD (ang. triggers)

PODSTAWY BAZ DANYCH 13. PL/SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

Wyzwalacze TWORZENIE WYZWALACZY

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

Wyzwalacze (triggery) Przykład

Administracja i programowanie pod Microsoft SQL Server 2000

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

Aspekty aktywne baz danych

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

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

Obiekty bazy danych DB2

15. Funkcje i procedury składowane PL/SQL

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

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

Bloki anonimowe w PL/SQL

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

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

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

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

Bazy danych 6. Klucze obce. P. F. Góra

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

Zarzadzanie transakcjami. Transakcje

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

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

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Bazy danych, 4. wiczenia

Hurtownia Świętego Mikołaja projekt bazy danych

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

Bazy danych 10. SQL Widoki

Oracle11g: Wprowadzenie do SQL

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

Oracle PL/SQL. Paweł Rajba.

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

BAZA DANYCH SIECI HOTELI

Pakiety podprogramów Dynamiczny SQL

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

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

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

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

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

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

Aby stworzyć widok, należy mieć uprawnienia do wszystkich obiektów do których odnosi się widok.

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

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

Paweł Rajba

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

Projektowanie systemów baz danych

Indeksy. Indeks typu B drzewo

Technologie baz danych WYKŁAD 7: Wyjątki

Wykład 5. SQL praca z tabelami 2

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

SYSTEM INFORMATYCZNY KS-SEW

Systemy GIS Tworzenie zapytań w bazach danych

Język PL/SQL Pakiety podprogramów

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

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

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Autor: Joanna Karwowska

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

SQL 4 Structured Query Lenguage

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

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

Zarządzanie obiektami bazy danych Oracle11g

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

Zmiany funkcjonalne i lista obsłużonych zgłoszeń Comarch DMS , Comarch DMS i Comarch DMS

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

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

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

Ćwiczenia 2 IBM DB2 Data Studio

Administracja i programowanie pod Microsoft SQL Server 2000

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

Procedury i funkcje składowane

Baza danych inside. Biologiczne Aplikacje Baz Danych

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

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

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

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). 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; automatyczne generowanie treści, np. obsługa pól auto increment, w szczególności, można wykorzystać wyzwalacz w połączeniu z sekwencja do automatycznego generowania wartości kluczy głównych. Wybieramy jedną z opcji przed zdarzeniem (wyzwalacz typu BEFORE), po zdarzeniu (AFTER), zamiast zdarzenia (INSTEAD OF) (ten typ wyzwalaczy stosujemy do widoków).

Wybieramy jedną z opcji Określamy, dla którego ze zdarzeńinsert / UPDATE / DELETE wyzwalacz ma zostać zdefiniowany. Jeden wyzwalacz może zostać zdefiniowany dla kilku zdarzeń. Wybieramy jedną z opcji Określamy, dla którego ze zdarzeńinsert / UPDATE / DELETE wyzwalacz ma zostać zdefiniowany. Jeden wyzwalacz może zostać zdefiniowany dla kilku zdarzeń. W klauzulion określamy tabelę lub widok. Wyzwalacze na poziomie wiersza lub instrukcji Dwa typy wyzwalaczy: typu ROW działające na poziomie wiersza (wierszowe), które definiujemy za pomocą klauzuli, działające na poziomie instrukcji (opcja domyślna). Wyzwalacz wierszowy jest uruchamiany dla każdego wiersza, na którym operuje instrukcja DML, wyzwalacz zdefiniowany na poziomie instrukcji jest uruchamiany raz w odpowiedzi na instrukcję. np. w przypadku aktualizacji 10 wierszy, wyzwalacz typu ROW będzie uruchamiany 10 razy. 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 kwalifikatorynew orazold, 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.

Wyzwalacze działajace dla kilku zdarzeń DML 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. 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... Stosowanie predykatów INSERTING, UPDATING, DELETING Zarzadzanie wyzwalaczami 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, np. IF INSERTING THEN... ELSIF UPDATING THEN... ELSIF DELETING THEN... END IF; Do usuwania wyzwalaczy służy instrukcjadrop 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 nazwadisable. Aby ponownie aktywować wyzwalacz, należy użyć instrukcji ALTER TRIGGER nazwaenable. Dla jednej tabeli może być zdefiniowanych kilka wyzwalaczy tego samego typu. Są one wówczas uruchamiane sekwencyjnie.

Sekwencje Uwaga. Od wersji 11g bazy Oracle, można użyć klauzulifollows w definicji wyzwalacza, aby określić kolejność wykonywania wyzwalaczy tego samego typu: CREATE OR REPLACE TRIGGER nowy1 AFTER INSERT ON employee FOLLOWS nowy... Sekwencje w bazie Oracle to mechanizmy umożliwiające generowanie kolejnych wartości liczbowych. Instrukcja tworząca sekwencję: CREATE SEQUENCE nazwa INCREMENT BY liczba START WITH liczba Znaczenie opcji INCREMENT BY liczba skok sekwencji (domyślnie 1), START WITH liczba wartość początkowa (domyślnie 1). Metody sekwencji: CURRVAL pobranie bieżącej wartości, NEXTVAL pobranie następnej wartości. Sekwencje Sekwencje Definiujemy sekwencję dla klucza głównego emp_no tabeli employee: CREATE SEQUENCE emp_no_seq INCREMENT BY 1 START WITH 200 Wykorzystanie sekwencji: INSERT INTO employee (emp_no, first_name, last_name, salary, dept_no, hire_date, job_code, job_grade, job_country) VALUES(emp_no_seq.NEXTVAL, Anna, Kowalska,5000, 000,sysdate, Admin,4, USA ); Każde wywołanie metody NEXTVAL powoduje zwiększenie wartości sekwencji o zadany skok. Jeżeli wartość ta nie zostanie wykorzystana, np. z powodu błędu w instrukcji INSERT, wycofania transakcji, zostaje utracona. Przy następnym wywołaniu NEXTVAL zwraca kolejną wartość. Jedną sekwencję można wykorzystywać do generowania wartości kluczy głównych w kilku tabelach. Metoda CURRVAL nie zmienia wartości sekwencji, a jedynie zwraca bieżącą. Uwaga. Metodę CURRVAL można stosować dopiero po pobraniu pierwszej wartości z sekwencji za pomocą NEXTVAL.

Wykorzystanie sekwencji w wyzwalaczach Wyzwalacz dla tabeli employee, wstawiający do pola klucza głównego emp_no kolejną wartość pobraną z sekwencji emp_no_seq. CREATE OR REPLACE TRIGGER wstaw_emp_no BEFORE INSERT ON employee DECLARE numer INT; BEGIN IF (:NEW.emp_no IS NULL) THEN SELECT emp_no_seq.nextval INTO numer FROM dual; :NEW.emp_no := emp_no_seq.nextval; END IF; END;