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



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

Oracle PL/SQL. Paweł Rajba.

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

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

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

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

1. Wyzwalacze BD (ang. triggers)

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Cele. Definiowanie wyzwalaczy

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Zaawansowane bazy danych i hurtownie danych semestr I

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

Administracja i programowanie pod Microsoft SQL Server 2000

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

Wyzwalacze TWORZENIE WYZWALACZY

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

BAZA DANYCH SIECI HOTELI

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

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

SQL (ang. Structured Query Language)

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

Pakiety podprogramów Dynamiczny SQL

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

Hurtownia Świętego Mikołaja projekt bazy danych

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

SQL :: Data Definition Language

Wyzwalacze (triggery) Przykład

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

Projektowanie systemów baz danych

Język SQL, zajęcia nr 1

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

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

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy danych, 4. wiczenia

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

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

Bazy danych. Polecenia SQL

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

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

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

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

Bazy danych - Materiały do laboratoriów VIII

Aspekty aktywne baz danych

Wykład 8. SQL praca z tabelami 5

Bazy danych 10. SQL Widoki

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

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Składowane procedury i funkcje

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

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

Oracle11g: Programowanie w PL/SQL

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

Systemowe aspekty baz danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

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

Zarządzanie obiektami bazy danych Oracle11g

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

Oracle PL/SQL. Paweł Rajba.

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

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

Bazy danych i usługi sieciowe

Systemowe aspekty baz

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

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

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

Paweł Rajba

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Systemy GIS Tworzenie zapytań w bazach danych

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

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

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Przykładowa baza danych BIBLIOTEKA

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

BAZY DANYCH W APLIKACJACH SIECIOWYCH

Bazy Danych i Usługi Sieciowe

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

SQL 4 Structured Query Lenguage

ACESS- zadania z wykorzystaniem poleceń SQL

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

BAZY DANYCH Cz III. Transakcje, Triggery

Oracle10g: Programowanie w PL/SQL

Wykład 05 Bazy danych

Ref. 7 - Język SQL - polecenia DDL i DML

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

Zarzadzanie transakcjami. Transakcje

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

Transkrypt:

Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN Triggery INSERT, UPDATE, DELETE Mogą być wykonane przed BEFORE lub po AFTER danej operacji. Mogą być wykonane dla każdego zmienianego wiersza FOR EACH ROW lub jednokrotnie dla pełnej realizacji instrukcji Przykład: Wykonujemy instrukcję: UPDATE USERS SET salary = salary * 2 WHERE name > 'P' Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście. Przypadek 1: Dla tabeli USERS jest założony trigger: BEFORE UPDATE ON USERS FOR EACH ROW dosomething Procedura dosomething będzie wykonywana przed zmianą każdego wiersza, czyli zostanie wykonana tyle razy ile jest wierszy, które mają zostać zmienione. Przypadek 2: Dla tabeli USERS jest założony trigger: BEFORE UPDATE ON USERS dosomething Procedure dosomething będzie wykonana jednokrotnie przed wykonaniem polecenia, które wydaliśmy, czyli przed zaktualizowaniem pierwszego wiersza. Analogicznie z AFTER.

Triggery DML INSERT, UPDATE, DELETE Składania Tworzenie triggera CREATE [OR REPLACE] TRIGGER <nazwa triggera> <BEFORE lub AFTER> <instrukcja DML> [OR ] ON <nazwa tabeli> [FOR EACH ROW] [WHEN (<warunek z użyciem obiektów old i new>)] DECLARE BEGIN END; / Można wymienić jedną lub kilka instrukcji DML: INSERT INSERT OR UPDATE INSERT OR UPDATE OR DELETE itd.. W przypadku instrukcji UPDATE można wymienić kolumny tzn. Trigger zostanie wywołany tylko wtedy, gdy zmieni się wartość pola w podanej kolumnie, lub jednej z podanych kolumn. UPDATE OF <nazwa pola lub nazwy pól oddzielone przecinkami> Obiekty old i new Wewnątrz procedur triggerowych dostępnę są dwa szczególnie ważne obiekty: old i new, reprezentujące odpowiednio stary i nowy wiersz. Z przykładu old to wiersz, który zawiera jeszcze stare salary, a new to wiersz, który zawiera dwukrotnie większe salary; można wykorzystać to do obliczenia o ile wzrosła pensja: new.salary old.salary i zarejestrowania tego faktu w jakimś dzienniku BEFORE AFTER INSERT UPDATE DELETE Old bez znaczenia New wiersz, który będzie wstawiony do tabeli, można w nim zmienić wartości pól To samo, ale zmiana wartości pól w jakimkolwiek przypadku nie ma sensu; Old wiersz przed zmianą, zmiana wartości pól nie ma sensu New wiersz po zmianie, z zaktualizowanymi polami, można zmieniać w nim wartości pól To samo, ale zmiana wartości pól w jakimkolwiek przypadku nie ma sensu; Old wiersz, który zostanie za chwilę usunięty, zmiana wartości pól nie ma sensu New bez znaczenia To samo; Ponadto wiersz już nie istnieje Ponadto, wiersz new już istnieje Ponadto wiersz już został zaktualizowany

Jak dowiedzieć się dla jakiej instrukcji DML (INSERT, UPDATE, DELETE) został wywoały trigger? Służą do tego predykaty, które przyjmują wartość prawy lub fałszu: INSERTING DELETING UPDATING UPDATING('<nazwa kolumny>') Zalecenia ORACLE Nie używać triggerów do sprawdzania poprawności danych, którą można wykonać za pomocą wbudowanych funkcji Oracle (np. Integrity constraints lub check constraints) Nie tworzyć zbyt długich triggerów, lepiej zawrzeć część kodu w osobnych procedurach wywoływanych z triggera Należy tworzyć triggery, które będą poprawne niezależnie od tego, który użytkownik będzie z nich korzystał Nie wolno tworzyć triggerów rekursywnych. Prowadzą one to zapętlenia i wyczerpania zasobów pamięci. Zapytania do tej samej tabeli na której jest utworzony trigger, można wywoływać w triggerach AFTER Przykład triggera rekursywnego: AFTER UPDATE, taki, który wykonuje operacje UPDATE na tej samej tabeli, na której jest stworzony Przykłady zastosowania wykonanywanie skomplikowanej kontroli danych zapobieganie nieprawidłowym transakcjom zapewnianie integralności, której nie można zapewnić wbudowanymi funkcjami bazy danych implementacja złożonych reguł biznesowych implementacja złożonej autoryzacji transparentne rejestrowanie zdarzeń automatyczne generowanie wartości kolumn

Zadania Utworzyć tabelę USERS, która ma pola: ID, NAME, SALARY, CREATION_TIME, LAST_MODIFICATION_TIME Utworzyć tabelę USERS_LOG, która ma pola: ID, USER_ID, CHANGE_TIME, CHANGE_OF_SALARY Trigger może być użyty do automatycznego wstawiania daty i czasu wykonania zmiany danego wiersza (np. Mamy w jakiejś tabeli pole last_update_time) Można automatycznie wstawiać date i czas powstania rekordu (np. Mamy pole creation_time) Automatyczne logowanie zmian w jakiejś tabeli (np. Mamy tabelę osób, która zawiera aktualne wynagrodzenie i drugą tabelę, gdzie są zapisywane wszystkie zmiany wynagrodzenia dzięki triggerowi, dzieje się to automatycznie) Triggery na widokach INSTEAD OF Triggery na widokach są wykonywane zamiast danej operacji DML (INSERT, UPDATE, DELETE), a nie przed lub po niej, tak jak w przypadku triggerów DML. Działają one jedynie w trypie FOR EACH ROW. Składania CREATE [OR REPLACE] TRIGGER <nazwa triggera> INSTEAD OF <nazwa operacji DML> ON <nazwa tabeli> FOR EACH ROW DECLARE BEGIN END; / Przykład zastosowania Mamy dwie tabele: USERS z kolumnami ID, NAME, DEP_ID DEPARTMENTS z kolumnami ID, NAME Tabele połączone są po przez klucz obcy USERS.DEP_ID = DEPARTMENTS.ID Tworzymy widok CREATE VIEW UsersWithDepartmentView AS SELECT U.NAME AS 'USER_NAME', D.NAME AS 'DEP_NAME' FROM USERS U LEFT JOIN DEPARTMENTS D ON D.ID = U.DEP_ID który wyświetla nazwiska osób, a obok nich nazwę departamentu.

Zadania: Umożliwić operację INSERT na widoku UsersWithDepartmentView, która będzie dodawała użytkownika do tabeli USERS i wybierała odpowiedni DEP_ID lub będzie tworzyła nowy departament, jeśli jeszcze taki nie istnieje. Przykład: W tabeli USERS mamy: ID NAME DEP_ID 1 Thomas Brown 1 A w tabeli DEPARTMENTS mamy: ID NAME 1 Finances Instrukcja SELECT * FROM UsersWithDepartmentView zwróci nam: USER_NAME Thomas Brown DEP_NAME Finances Przypadek 1: INSERT INTO UsersWithDepartmentView (USER_NAME, DEP_NAME) VALUES ('Leszek Balcerowicz', 'Finances') powinna pobrać ID departamentu 'Finances' z tabeli DEPARTMENTS i wstawić odpowiedni rekord do tabeli USERS. Oczywiście, najpierw jeszcze ustalić unikalne ID dla nowego rekordu w tabeli USERS. Przypadek 2: INSERT INTO UsersWithDepartmentView (USER_NAME, DEP_NAME) VALUES ('Alfred Tarski', 'IT') powinna wstawić nowy departament do tabeli DEPARTMENTS, a następnie wstawić nowy rekord do tabeli USERS. Przypadek 3: INSERT INTO UsersWithDepartmentView (USER_NAME, DEP_NAME) VALUES ('Thomas Brown', 'IT') powinna pobrać ID departamentu 'IT' i w rekordzie 'Thomas Brown' powinna zmienić DEP_ID. Czyli: jeżeli departament nie istnieje to go założyć i nadać mu nowe ID jeżeli użytkownik nie istnieje to go utworzyć i nadać mu nowe ID i przydzielić do odpowiedniego departamentu

jeżeli użytkownik istnieje, to przydzielić go do odpowiedniego departamentu Inne operacje związane z triggerami Włączenie i wyłączanie triggerów ALTER TRIGGER <nazwa triggera> <ENABLE lub DISABLE> ALTER TABLE <nazwa tabeli> <ENABLE lub DISABLE> ALL TRIGGERS Rekompilacja triggera ALTER TRIGGER <nazwa triggera> COMPILE Usuwanie triggera DROP TRIGGER <nazwa triggera> Sprawdzanie błędów kompilacji SHOW ERRORS TRIGGER <nazwa triggera>;