Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Wykład 3 Prowadzący: dr Paweł Drozda
Skrypty, procedury przechowywane i wyzwalane
SQL – Strukturalny język zapytań
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Język SQL Część II.
PHP + MySQL część II.
MS Access – Makropolecenia
MS Access 2003 Kwerendy Paweł Górczyński.
MS Access 2000 Kwerendy Piotr Górczyński 25/08/2001.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
ODE Zapytania. Pętla for (1) Do obiektów będących instancjami klas możemy uzyskać dostęp za pomocą pętli for Zakres tej pętli to wszystkie obiekty klasy.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 8: Perspektywy i sekwencery.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
Język definicji danych (Data Definition Language)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
Rekordy 1 Definicja Typ strukturalny nazywamy typem rekordowym, jeżeli zawiera pewną liczbę nazwanych składowych, które mogą być różnych typów. Dostęp.
Wykład 2 Wojciech Pieprzyca
BD-LAB6 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Relacyjne Bazy Danych (Oracle) Prezentacja jest współfinansowana.
„Relacyjne Bazy Danych (Oracle)”
Zarządzanie transakcjami w SQL Server
Język SQL (Structured Query Language) DDL (Data Definition Language)
Bezpieczeństwo baz danych
Teoria relacyjnych baz danych
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
OPERACJA DZIELENIA W SQL
MS ACCESS Kwerendy.
SQL – Structured Query Language (3)
MySQL – ODBC - ACCESS.
Administracja serwerem bazy danych Oracle 11g Zarządzanie strukturą bazy danych Wykład nr 2 Michał Szkopiński.
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
SQL – Structured Query Language (1)
dr hab. Ryszard Walkowiak prof. nadzw.
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
Tabele historyczne w PostgreSQL
SQL - Structured Query Language
Systemy Zarządzania Bazami Danych Laboratorium 05 Widoki i eksport tabel/widoków 1.
Podstawy informatyki 2013/2014
Operacje edycyjne w bazie danych - kwerendy funkcjonalne Marzena Nowakowska Katedra Informatyki Stosowanej, WZiMK, PŚk.
Komendy SQL do pracy z tabelami i bazami
PL/SQL – dalsza wędrówka
Projektowanie bazy danych
Temat 1: Strukturalny język zapytań SQL
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat.
1 Wykład Asercje, wyzwalacze i prawa. 2 Elementy aktywne bazy Chcielibyśmy, aby baza danych zapewniała nam pewne własności lub niezmienniki.
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Bazy Danych Wprowadzenie
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
Oracle Data Modeler (4.1). Aplikacja Wymagania biznesowe Tworzenie systemu informacyjnego Procesy Informacje Analiza Projektowanie Browser: Hollywood.
Temat: Tworzenie bazy danych
Widoki (views) - Perspektywy:
DDL język definiowania danych
Strukturalny język zapytań SQL - historia
Technologie Informacyjne Bazy danych
Zapis prezentacji:

Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np. przed/po wykonaniu zapytania : aktualizującego dane w bazie usuwającego dane z bazy wprowadzającego nowe dane do bazy działają na najniższym poziomie dostępu do bazy są bardzo ważnym narzędziem pozwalającym utrzymać integralność referencyjną bazy.

Procedury wyzwalane Procedury wyzwalane używają tabel wirtualnych Inserted Deleted o takiej samej strukturze jak struktura tabeli aktualizowanej. Jeżeli dodawany jest nowy wiersz do tabeli aktualizowanej, wpis rejestrowany jest w tabeli bazowej jak i w tabeli Inserted Gdy dane są usuwane, usunięty rekord przechowywany jest w tabeli Deleted

Typy procedur wyzwalanych Możemy dokonać podziału wg sposobu uruchamiania: uruchamiane: przed (BEFORE) zdarzeniem po (AFTER) zdarzeniu DML (INSERT, UPDATE, DELETE) - na tabelach uruchamiane zdarzeniem DDL (CREATE, ALTER, DROP) uruchamiane zamiast zdarzenia INSTEAD OF ... - powodującego wywołanie - na perspektywach uruchamiane po zajściu określonego zdarzenia w schemacie lub bazie danych SYSTEMOWE

Częstotliwość uruchamiania Możemy dokonać podziału wg częstotliwości uruchamiania: uruchamiane dla każdej krotki (wyzwalacz poziomu-wierszy), której dotyczy zdarzenie FOR EACH ROW (tylko dla zdarzeń DML i INSTEAD OF) uruchamiane jednorazowo (wyzwalacz poziomu-instrukcji) dla zdarzenia - niezależnie od liczby krotek, którego ono dotyczy wykonuje się jeden raz przy instrukcji powodującej jedno lub więcej zdarzeń wyzwalacza. (nie dotyczy INSTEAD OF)

Przykładowe zastosowania wyzwalaczy Wysyłanie do użytkowników systemu natychmiastowych komunikatów (np. email) o zajściu określonych zdarzeń, np. o przekroczeniu limitów kredytu o przekroczeniu limitów stanów magazynowych o wprowadzeniu transakcji oczekujących na autoryzację Dynamiczne modyfikowanie danych z natury statycznych, np. limitów kredytu statusów sektorów w magazynie składników polityki zapasów Modyfikacja funkcji, np. naliczania terminu płatności poprzez uwzględnienie dni wolnych od pracy i świąt

Przykładowe rozwiązania zastosowania wyzwalaczy Stworzenie funkcji nieistniejących, np. rozliczeni kosztów dodatkowych w module zarządzania powierzchnią magazynową, Dodatkowe rejestrowanie informacji o modyfikacjach w bazie danych ułatwiających ustalenie autora i czasu oraz zakresu modyfikowanej informacji. Wypełnianie atrybutów wartościami domyślnymi Śledzenie wydarzeń systemowych Modyfikacja złożonych perspektyw

Specyfika wykorzystania procedur wyzwalanych Procedury wyzwalane reagują - ograniczenia zapobiegają Procedury wyzwalane uruchamiane są tylko wtedy, gdy na tabeli zostanie wykonana określona operacja. Ograniczenia sprawdzane są w pierwszej kolejności sprawdzenie ograniczeń (jeśli w tabeli z procedurami wyzwalanymi zdefiniowano ograniczenia) jeśli ograniczenie zostanie przekroczone, to procedura wyzwalana nie zostanie uruchomiona. Tabele mogą mieć wiele procedur wyzwalanych w tabeli można zdefiniować wiele procedur wyzwalanych dla każdej akcji jedną procedurę dla wszystkich akcji.

Specyfika wykorzystania procedur wyzwalanych Właściciel tabeli musi mieć prawo do realizacji wszystkich poleceń, zawartych w procedurach wyzwalanych może tworzyć i usuwać procedury wyzwalane ma prawo do realizacji wszystkich instrukcji zawartych w procedurze wyzwalanej, w stosunku do wszystkich wykorzystywanych tabel. nie może przekazywać praw Procedur wyzwalanych nie można wiązać z tabelami tymczasowymi i widokami. (Mogą się do nich odwoływać)

Definiowanie procedury wyzwalanej CREATE [OR REPLACE] TRIGGER nazwa_triggera {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE} ON {tabela | perspektywa} [WHEN warunek ] [FOR EACH ROW] [DECLARE /* deklaracje zmiennych*/] BEGIN /* ciało procedury wyzwalanej */ END;

Definiowanie procedury wyzwalanej 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. Przykład CREATE OR REPLACE TRIGGER nazwa_trigger AFTER UPDATE OF imie, nazwisko ON student ...

Definiowanie procedury wyzwalanej Ta sama procedura może być uruchomiona przez każde spośród trzech poleceń DML (tj. INSERT, UPDATE, DELETE) lub ich dowolną kombinację. Przykład 1 CREATE OR REPLACE TRIGGER nazwa_trigger AFTER INSERT ON student... Przykład 2 AFTER INSERT OR UPDATE OR DELETE ON student...

Warunki i atrybuty CREATE OR REPLACE TRIGGER nazwa_trigger BEFORE UPDATE ON student FOR EACH ROW WHEN (OLD.srednia < 4) BEGIN ... END; w klauzuli WHEN można stosować operatory: matematyczne SQL logiczne (OLD.srednia>4 AND OLD.srednia<5) wartości atrybutów testujemy w następujący sposób: IF :NEW.srednia<=4.5 THEN... ;

Przykład procedury wyzwalanej 1 Poniższa procedura wyzwalana, sprawdza czy wypożyczane auto jest aktualnie na stanie (podobnie w przypadku wypożyczania książek – baza danych biblioteka) CREATE TRIGGER juz_wypozyczony ON wypozyczalnia FOR INSERT AS IF(SELECT COUNT(*) FROM wypozyczalnia, INSERTED WHERE wypozyczalnia.nr_samochodu=INSERTED.nr_samochodu AND wypozyczalnia.data_odd IS NULL)>=1 COMMIT TRANSACTION ELSE BEGIN PRINT ‘samochód jeszcze nie oddany’ ROLLBACK TRANSACTION END

Przykład procedury wyzwalanej 2 Generowanie jednoznacznego identyfikatora, wstawianego do jednego z pól przy wykonywaniu instrukcji INSERT. CREATE [OR REPLACE] TRIGGER generuj_id_studenta BEFORE INSERT ON student FOR EACH ROW BEGIN IF (:NEW.id_student IS NULL) THEN SELECT seq_student.NEXTVAL INTO :NEW.id_student FROM DUAL; END IF; END;

Przykład procedury wyzwalanej 3 Utrzymywanie zarobków w przedziale wartości, w zależności od stanowiska. CREATE TRIGGER sprawdzenie_zarobkow BEFORE INSERT OR UPDATE OF Zarobki, Stanowisko ON Pracownicy FOR EACH ROW DECLARE Minimum NUMBER; Maksimum NUMBER; BEGIN /* Znalezienie zakresu zarobków na danym stanowisku */ SELECT Min_zar, Max_zar INTO Minimum, Maksimum FROM Widełki WHERE Stanowisko = :NEW. Stanowisko; /* Jeżeli zarobki spoza zakresu, generuj błąd */ IF :NEW.Zarobki < Minimum OR :NEW.Zarobki > Maksimum THEN Raise_application_error(-20500,'Zarobki '|| : NEW. Zarobki ||' spoza zakresu ' ) ; END IF; END; /* Koniec wyzwalacza */

Przykład procedury wyzwalanej 4 Akcja jest wyzwalana przy próbie modyfikacji atrybutu cena. W wyniku powinna zostać uniemożliwiona każda próba obniżenia ceny. CREATE TRIGGER zmiany_cen AFTER UPDATE OF cena ON cennik REFERENCING OLD AS StaraKrotka NEW AS NowaKrotka WHEN (StaraKrotka.cena > NowaKrotka.cena) UPDATE cennik SET cena = StaraKrotka.cena WHERE cert# = NowaKrotka.cert# FOR EACH ROW ;

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 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_triggera DISABLE[ENABLE]; Wyzwalacz może zostać usunięty przy pomocy instrukcji: DROP TRIGGER nazwa_triggera;

Informacja o wyzwalaczach Informacje o wyzwalaczach znajdują się w perspektywie słownika danych User_triggers. Aby je obejrzeć piszemy: SELECT Trigger_type, Table_name, Triggering_event FROM User_triggers WHERE Trigger_name = 'wyzwalacz'; lub SELECT Trigger_body *(nazwę wyzwalacza piszemy dużymi literami)

Dziękuję :)