Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/



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

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

Wyzwalacze TWORZENIE WYZWALACZY

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

1. Wyzwalacze BD (ang. triggers)

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. Rozdział 6. Procedury wyzwalane

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

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

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

Cele. Definiowanie wyzwalaczy

Administracja i programowanie pod Microsoft SQL Server 2000

Oracle PL/SQL. Paweł Rajba.

PODSTAWY BAZ DANYCH 13. PL/SQL

Paweł Rajba

Technologie baz danych WYKŁAD 7: Wyjątki

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

BAZY DANYCH W APLIKACJACH SIECIOWYCH

Bazy danych, 4. wiczenia

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

Aspekty aktywne baz danych

Oracle PL/SQL. Paweł Rajba.

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

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

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

Oracle11g: Wprowadzenie do SQL

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

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

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

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

Microsoft SQL Server Podstawy T-SQL

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

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

Hurtownia Świętego Mikołaja projekt bazy danych

Oracle11g: Programowanie w PL/SQL

Pakiety podprogramów Dynamiczny SQL

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

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

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

Baza danych inside. Biologiczne Aplikacje Baz Danych

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

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

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

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

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych 10. SQL Widoki

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

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

1 Projekt fizyczny 1. 3 Perspektywy słownika danych Źródła 12

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

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

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

BAZA DANYCH SIECI HOTELI

Język PL/SQL Pakiety podprogramów

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

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

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

SQL :: Data Definition Language

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

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

Bloki anonimowe w PL/SQL

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

Oracle PL/SQL. Paweł Rajba.

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

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

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

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

Oracle10g: Programowanie w PL/SQL

SQL 4 Structured Query Lenguage

Indeksy. Indeks typu B drzewo

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Administracja i programowanie pod Microsoft SQL Server 2000

Uprawnienia, role, synonimy

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

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

Zarzadzanie transakcjami. Transakcje

Bazy danych - Materiały do laboratoriów VIII

Oracle PL/SQL. Paweł Rajba.

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

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

Wykład 8. SQL praca z tabelami 5

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

Administracja i programowanie pod Microsoft SQL Server 2000

15. Funkcje i procedury składowane PL/SQL

Oracle PL/SQL. Paweł Rajba.

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

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

Systemowe aspekty baz

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

Relacyjne bazy danych. Podstawy SQL

Transkrypt:

Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/

Zawartość modułu 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze dla zdarzeń systemowych i zdarzeń użytkownika Wyzwalacze i sekwencje - 2 -

Wyzwalacze Co to jest wyzwalacz? Do czego możemy ich używać Audyt operacji DDL i DML Wymuszanie reguł poprawności danych Wymuszanie zachowania integralności, których nie można uzyskać w sposób deklaratywny Obsługa zdarzeń Automatyczne generowanie treści, np. auto increment Obsługa zdarzeń systemowych - 3 -

Wyzwalacze Jakie zdarzenia mogą być obsługiwane przez wyzwalacze Operacje DDL (CREATE, ALTER, DROP) Operacje DML (INSERT, UPDATE, DELETE) Zdarzenia systemowe (STARTUP, SHUTDOWN) Zdarzenia użytkownika (LOGON, LOGOFF) Nazwa wyzwalacza może być taka sama jak nazwa tabeli, ale nie jest to zalecane Wyzwalacze są w innej przestrzeni nazw - 4 -

Definiowanie wyzwalaczy DML Składnia CREATE [OR REPLACE] TRIGGER nazwa [BEFORE AFTER] zdarzenie [OF kolumna] ON tabela [klauzula_referencing] [WHEN warunek] [FOR EACH ROW] treść_wyzwalacza - 5 -

Definiowanie wyzwalaczy DML Znaczenie opcji zdarzenie to INSERT, UPDATE, DELETE lub ich kombinacja, np. INSERT OR UPDATE OF kolumna określa, która z kolumn będzie modyfikowana (jeśli zdarzeniem będzie UPDATE) WHEN warunek określa warunki, które muszą być spełnione, żeby wyzwalacz został uruchomiony FOR EACH ROW określa tryb, który może być ROW lub STATEMENT REFERECING pozwala na niestandardowe nazwanie pseudowierszy OLD i NEW - 6 -

Definiowanie wyzwalaczy DML Tryb ROW i STATEMENT Wyzwalacz może reagować na poziomie wiersza lub na poziomie instrukcji Domyślnie jest na poziomie instrukcji, wstawiając FOR EACH ROW będzie na poziomie wiersza ROW jest uruchamiany dla każdego wiersza, na którym operuje instrukcja DML, STATEMENT jest uruchamiany raz w odpowiedzi na instrukcję np. w przypadku aktualizacji 10 wierszy ROW będzie uruchamiany 10 razy, STATEMENT 1 raz - 7 -

Definiowanie wyzwalaczy DML Tryb ROW i STATEMENT różnice R: wyzwalany dla każdego wiersza S: wyzwalany raz w ramach danej instrukcji w przypadku, gdy operacja DML nie oddziałuje na żaden wiersz: R nie wykona się w ogóle, S: wykona się raz R: jest dostęp do danych wierszy S: nie ma dostępu do danych wierszy R: AFTER ROW blokują wiersze z danymi S: nie ma powyższej blokady - 8 -

Definiowanie wyzwalaczy DML Klauzula REFERENCING Domyślnie dostęp do wierszy w wyzwalaczu jest poprzez pseudo wiersze OLD i NEW Można to zmienić używając klauzuli REFERENCING Składnia REFERENCING [OLD AS nazwa] [NEW AS nazwa] Odwołanie jest poprzez :NEW i :OLD Klauzula ma sens tylko w wyzwalaczach typu ROW w przypadku statement klauzula spowoduje błąd kompilacji new i old są dostępne w triggerach AFTER i BEFORE - 9 -

Definiowanie wyzwalaczy DML Klauzula WHEN Określa warunek na wiersze, dla których wyzwalacz zostanie uruchomiony Składnia jest taka jak dla klauzuli WHERE Używamy tylko w wyzwalaczach w trybie ROW Odwołania do NEW i OLD bez dwukropków przed Składnia WHEN (warunek) - 10 -

Definiowanie wyzwalaczy DML Wiele zdarzeń wyzwalających Możemy utworzyć wyzwalacz, który reaguje na kilka zdarzeń (np. UPDATE i DELETE) Żeby wewnątrz wyzwalacza odróżnić, które zdarzenie miało miejsce, mamy predykaty: INSERTING, UPDATING, DELETING Przykład użycia IF INSERTING THEN... ELSIF UPDATING THEN... ELSIF DELETING THEN... END IF; - 11 -

Definiowanie wyzwalaczy DML Wiele wyzwalaczy na jednej tabeli Można na danej tabeli robić kombinacje BEFORE, AFTER ROW, STATEMENT INSERT, UPDATE, DELETE co daje 12 różnych wyzwalaczy na jednej tabeli A co jeśli zrobimy dwa takie wyzwalacze na jednej tabeli? Po pierwsze możemy tak zrobić Przykłady pokazują, że wyzwalacze będę uruchamiane w kolejności odwrotnej do tej, w której były tworzone - 12 -

Metadane wyzwalaczy Mamy cztery perspektywy USER_OBJECTS, ALL_OBJECTS Info o wersji skompilowanej USER_SOURCE, ALL_SOURCE Kody źródłowe W obu tabelach OBJECT_TYPE jest TRIGGER Odpalamy zapytania select object_name, object_type, status from user_objects where object_name=nazwa; select text from user_source where name=nazwa; - 13 -

Inne zagadnienia Właczenia i wyłączanie ALTER TRIGGER nazwa ENABLE DISABLE [ALL TRIGERS] Kolumna user_triggers.status (all_triggers.status) pozwala ustalić, czy wyzwalacz jest włączony Usunięcie wyzwalacza DROP TRIGGER nazwa; usunięcie tabeli powoduje automatyczne usunięcie powiązanych z nim wyzwalaczy Przykład: wyzwalacze-dml.txt - 14 -

Tabele mutujące Co to jest tabela mutująca? Kiedy tabela jest mutująca Jest modyfikowana przez instrukcję DML lub wyzwalacz Może być modyfikowana przez zależność klucza obcego (np. cascade) Dotyczy głównie wyzwalaczy typu ROW W niektórych przypadkach także typu STATEMENT Przykład: wyzwalacze-mutujace.txt - 15 -

Wyzwalacze INSTEAD OF Perspektywa może być modyfikowana, gdy w jej zapytaniu definiującym nie ma: złączeń operatorów SET funkcji agregujących klauzul GROUP BY, CONNECT BY i START WITH operatora DISTINCT pseudokolumn i wyrażeń W pozostałych przypadkach przydatne są wyzwalacze typu INSTEAD OF - 16 -

Definiowanie wyzwalaczy INSTEAD OF Składnia CREATE [OR REPLACE] TRIGGER nazwa INSTEAD OF zdarzenia [OF kolumna] ON widok [klauzula_referencing] [FOR EACH ROW] treść_wyzwalacza Kilka uwag Tego typu wyzwalacze są zawsze typu ROW Nie ma AFTER, BEFORE, WHEN Znaczenie pozostałych parametrów bez zmian Przykład: wyzwalacze-insteadof.txt - 17 -

Wyzwalacze systemowe i użytkownika W Oracle'u możemy także tworzyć wyzwalacze na zdarzenia systemowe Uruchomienie i zatrzymanie bazy danych Logowanie do i wylogowanie z bazy danych zwykle aplikacji klienckiej Błędy po stronie serwera oraz na zdarzenia użytkownika Początek i koniec sesji Operacje języka DDL - 18 -

Wyzwalacze systemowe i użytkownika Definiowanie takich wyzwalaczy CREATE [OR REPLACE] TRIGGER nazwa [BEFORE AFTER] zdarzenie ON {DATABASE [schemat.]schema} [WHEN warunki] treść_wyzwalacza Wyzwalacze takie tworzymy albo na poziomie bazy danych, albo na poziomie schematu - 19 -

Wyzwalacze systemowe i użytkownika Zdarzenia systemowe mogą być: STARTUP (AFTER), SHUTDOWN (BEFORE), SERVERERROR (AFTER), LOGON (AFTER), LOGOUT (BEFORE) Zdarzenia użytkownika mogą być: LOGON (AFTER), LOGOFF (BEFORE), SERVERERROR (AFTER), CREATE (BEFORE, AFTER), ALTER (BEFORE, AFTER), DROP (BEFORE, AFTER) - 20 -

Wyzwalacze systemowe i użytkownika Atrybuty na poziomie bazy danych sys.sysevent, varchar(20) zdarzenie systemowe wyzwalające trigger sys.instance_num, number numer instancji sys.database_name, varchar2(50) nazwa bazy d. sys.server_error, number zwraca numer błędu sys.is_servererror, boolean czy błąd jest błędem serwera sys.login_user, varchar2(30) nazwa użytkownika - 21 -

Wyzwalacze systemowe i użytkownika Na poziomie użytkownika, oprócz atrybutów systemowych mamy następujące atrybuty: sys.dictionary_obj_type, varchar2(20) typ obiektu, na którym wykonano operację DDL sys.dictionary_obj_name, varchar2(30) nazwa obiektu, na którym wykonano operację DDL sys.dictionary_obj_owner, varchar2(30) właściciel obiektu, na którym wykonano operację DDL - 22 -

Wyzwalacze systemowe i użytkownika Atrybuty zdarzeń użytkownika CREATE, ALTER, DROP (BEFORE, AFTER) sys.sysevent, sys.login_user, sys.instance_num, sys.database_name, sys.dictionary_obj_type, sys.dictionary_obj_name, sys.dictionary_obj_owner LOGON, LOGOFF sys.sysevent, sys.login_user, sys.instance_num, sys.database_name - 23 -

Wyzwalacze systemowe i użytkownika Atrybuty zdarzeń systemowych STARTUP, SHUTDOWN sys.sysevent, sys.login_user, sys.instance_num, sys.database_name SERVERERROR sys.sysevent, sys.login_user, sys.instance_num, sys.database_name, sys.server_error, sys.is_servererror Przykład: wyzwalacze-systemowe-uzytkownika.txt - 24 -

Wyzwalacze i sekwencje Co to są sekwencje? Tworzenie sekwencji CREATE SEQUENCE nazwa [INCREMENT BY liczba] [START WITH liczba] [MAXVALUE liczba NOMAXVALUE] [MINVALUE liczba NOMINVALUE] [CYCLE NOCYCLE] [CACHE liczba NOCACHE] [ORDER NOORDER] - 25 -

Wyzwalacze i sekwencje Tworzenie sekwencji, znaczenie opcji INCREMENT BY liczba określa skok START WITH liczba wartość początkowa MAXVALUE liczba górne ograniczenie NOMAXVALUE brak ograniczenia (domyślnie) MINVALUE liczba dolne ograniczenie NOMINVALUE brak ograniczenia (domyślnie) CYCLE po osiągnieciu ograniczenia, generowanie będzie od początku NOCYCLE przeciwne do CYCLE (domyślnie) - 26 -

Wyzwalacze i sekwencje Tworzenie sekwencji, znaczenie opcji c.d. CACHE liczba ile następnych liczb sekwencji ma być przygotowana w pamięci, domyślnie jest 20 NOCACHE liczby będą generowane on-line Nie podając żadnych opcji tworzymy sekwencję, która zaczyna się o 1 skok jest o 1 nie ma ograniczenia górnego nie ma generowania cyklicznego - 27 -

Wyzwalacze i sekwencje Modyfikowanie sekwencji ALTER SEQUENCE nazwa [opcje_takie_jak_przy_tworzeniu] Jeśli chcemy zrestartować sekwencję od innej liczby, trzeba go usunąć i utworzyć ponownie Usunięcie sekwencji DROP SEQUENCE nazwa Metody sekwencji CURRVAL pobranie bieżącej wartości NEXTVAL pobranie następnej wartości - 28 -

Wyzwalacze i sekwencje Przykład: wyzwalacze-sekwencje.txt - 29 -