• Nie Znaleziono Wyników

Zajęcia nr V PL/SQL

N/A
N/A
Protected

Academic year: 2021

Share "Zajęcia nr V PL/SQL"

Copied!
12
0
0

Pełen tekst

(1)

PL/SQL

Zajęcia nr V

(2)

Wyzwalacze

Zdarzeniowo (podczas zajścia operacji na

bazie danych) uruchamiane nazwane bloki PL/SQL, związane z tabelą, widokiem,

schematem lub bazą danych.

(3)

Wyzwalacze

Automatycznie uruchamiane w trakcie takich zdarzeń jak:

• każdego wiersza związanego z instrukcja DML (z wykorzystaniem FOR EACH ROW)

• użycia instrukcji DML (INSERT, DELETE, UPDATE)

• użycia instrukcji DDL (CREATE, DROP, ALTER)

• zdarzenia bazodanowego (SERVERERROR(AFTER), LOGON(AFTER), LOGOFF(BEFORE),

STARTUP(AFTER)(DATABASE),

SHUTDOWN(BEFORE) (DATABASE))

(4)

Składnia wyzwalaczy

* - może być kilka rozdzielonych słowem ‘OR’

INSERT, DELETE -- wyzwalacz dla instrukcji odp. INSERT lub DELETE

UPDATE [OF kol,...] -- wyzwalacz dla instrukcji UPDATE (modyfikującej kolumnę)

Klauzula INSTEAD OF – jest związana z implementacją wyzwalacza na widoku, który może być oparty o złączenia tabel i wówczas zamiast próby operacji na widoku (co się nie powiedzie) wykonywany jest kod wyzwalacza

Klauzula WHEN z warunkiem (występującą z FOR EACH ROW) powoduje uruchomienie wyzwalacza dla wiersza jeśli jest spełniony warunek.

Przed deklaracją zmiennych bloku występuje DECLARE a nie występuje IS

CREATE [OR REPLACE] TRIGGER nazwa_trg

[BEFORE|AFTER] [INSTEAD OF] [rodzaj instrukcji]*

ON [tabela|widok|DATABASE|SCHEMA]!

[FOR EACH ROW ]

[WHEN ( warunek logiczny )]

blok PL/SQL

(5)

Wyzwalacze – zmienne wiersza

W wyzwalaczu wierszowym można odwoływać się do starych i nowych wartości w wierszu:

:OLD.kolumna - kolumna przed zmiana

:NEW.kolumna - kolumna po zmianie

(w warunku WHEN nie występują dwukropki)

w wyzwalaczu dla INSERT nie występują zmienne OLD w wyzwalaczu dla DELETE nie występują zmienne NEW

(6)

Wyzwalacze - stosowanie

Specjalne zmienne systemowe typu BOOLEAN informują o typie operacji:

INSERTING - wyzwalacz uruchomiony dla INSERT

DELETING - wyzwalacz uruchomiony dla DELETE

UPDATING - wyzwalacz uruchomiony dla UPDATE

(7)

Wyzwalacze – włączanie/wyłączanie

Operacja na wyzwalaczach:

• ALTER TRIGGER nazwa_trg [ENABLE|DISABLE]!;

- włącz / wyłącz wyzwalacz

• DROP TRIGGER nazwa_trg; - usuń

• ALTER TRIGGER nazwa_trg COMPILE; - kompiluj kod wyzwalacza

Dane o wyzwalaczach użytkownika są przechowywane w perspektywie USER_TRIGGERS.

(8)

Wyzwalacze - przykłady

Automatyczne nadanie wartości dla kolumny klucza głównego

Zadanie 1: przetestować

CREATE OR REPLACE TRIGGER new_dept_rl_i BEFORE INSERT ON NEW_DEPT

FOR EACH ROW BEGIN

SELECT NVL(MAX(deptno),0)+10 INTO :NEW.deptno

FROM NEW_DEPT;

END;

(9)

Wyzwalacze - przykłady

CREATE OR REPLACE TRIGGER new_dept_u BEFORE UPDATE OF loc ON NEW_DEPT

BEGIN

DBMS_OUTPUT.PUT_LINE( 'lokalizacja zmieniona' );

END;

CREATE OR REPLACE TRIGGER new_dept_rl_u BEFORE UPDATE OF loc ON NEW_DEPT

FOR EACH ROW BEGIN

DBMS_OUTPUT.PUT_LINE( 'lokalizacja zmieniona z '

|| :OLD.loc

|| ' na ' ||

:NEW.loc );

(10)

Wyzwalacze - przykłady

CREATE OR REPLACE TRIGGER new_dept_iu BEFORE UPDATE OR INSERT ON NEW_DEPT BEGIN

IF INSERTING THEN

DBMS_OUTPUT.PUT_LINE( 'Wykonano insert');

ELSE

DBMS_OUTPUT.PUT_LINE( 'Wykonano update');

END IF;

END;

CREATE OR REPLACE TRIGGER new_dept_rl_iu BEFORE UPDATE OR INSERT ON NEW_DEPT

FOR EACH ROW BEGIN

IF INSERTING THEN

DBMS_OUTPUT.PUT_LINE( 'Wykonano insert wiersza');

ELSE

DBMS_OUTPUT.PUT_LINE( 'Wykonano update wiersza');

END IF;

END;

Zadanie 3: przetestować

(11)

Wyzwalacze - przykłady

Zadanie 4:

1. Osadzić

CREATE OR REPLACE TRIGGER new_dept_d BEFORE DELETE ON NEW_DEPT

BEGIN

IF RTRIM(TO_CHAR(SYSDATE, 'DAY') )= 'SOBOTA' THEN DBMS_OUTPUT.PUT_LINE( 'ZMIANA W SOBOTĘ' );

ELSE

RAISE_APPLICATION_ERROR( -20111

, 'Można kasować tylko w sobotę');

END IF;

END;

(12)

Zadanie

Wykonać auditing usuwania dla tabeli new_dept Oprócz usuwanych danych rejestrować nazwę

użytkownika (user) i czas (sysdate)

Tabela audytu niech ma nazwę new_dept_aud Dodatowe, opisane wyżej kolumny, to

data_czas_operacji i uzytkownik

Dokonać kolejno operacji usunięcia wierszy – sprawdzić działanie audytu

Cytaty

Powiązane dokumenty

Wyjątkiem w PL/SQL jest spełnienie warunków wystąpienia sytuacji nieprawidłowej, w której ciąg instrukcji nie jest dalej realizowany, ale.. realizacja przechodzi do

Deklaracja kursorów jawnych odbywa się w sekcji DECLARE Kursory mogą być otwierane instrukcją:.

• Funkcja PL/SQL jest nazwaną jednostką programu, która realizuje akcję opisaną instrukcjami i zwraca wynik typu. określonego w

Przykładem wielokrotnego użycia operatora LEFT JOIN może być wykonana w Listing 16 modyfikacja Listing 15, która do tabeli tymczasowej powstałej przez złączenie zewnętrzne

Z dobroci serca nie posłużę się dla zilustrowania tego mechanizmu rozwojem istoty ludzkiej, lecz zaproponuję przykład róży, która w pełnym rozkwicie osiąga stan

Wobec powtórnego przedłożenia projektu - według konserwatora niewiele różniącego się od przedstawionego poprzednio - ponownie: zwróciliśmy się do Głównej

Jeżeli dla dowolnego lewego R-modułu wolnego M każde dwie bazy są tej samej mocy, to mówimy, że R ma własność niezmiennika bazowego (lub że jest pierścieniem IBP, invariant

➢miejsca kultu religijnego będące celem pielgrzymek, np.. Obiekty UNESCO w Polsce, jako atrakcja turystyczna kraju. • CEL OGÓLNY: Poznanie walorów turystycznych Polski ze