Wyzwalacz, trigger - procedura wykonywana na serwerze bazodanowym
w określonym momencie, na przykład dopisania nowego rekordu do tabeli, edycji rekordu w tabeli, skasowanie rekordu z tabeli.
Zastosowanie:
do sprawdzania integralności bazy danych,
do wykonywania czynności porządkowych w bazie danych
[http://pl.wikipedia.org/wiki/Wyzwalacz]
Kiedy [BEFORE, AFTER]
Zdarzenie [INSERT/UPDATE/DELETE]
Zakres [STATEMENT/EACH ROW]
CREATE OR REPLACE
TRIGGER nazwa_wyzwalacza
{ BEFORE | AFTER | INSTEAD OF }
{ DELETE | INSERT | UPDATE
[ OF kolumna, [, kolumna ] … ] }
[ OR { DELETE | INSERT | UPDATE
[ OF kolumna, [, kolumna ] … ] } ]
ON tabela
[ FOR EACH ROW [ WHEN (warunek) ] ]
blok pl/sql
Szczegóły składni [1] Strona 16-75
BEFORE
Klauzuli BEFORE używamy aby uruchomić wyzwalacz przed zdarzeniem go wywołującym.
Dla wyzwalaczy działających na wierszach , wyzwalacz jest uruchamiany przed zmianą każdego wiersza.
Ograniczenia:
- Nie można utworzyć wyzwalacza BEFORE na obiektach VIEW lub OBJECT VIEW.
- Można ustalać wartości dla zmiennych :NEW ale nie dla :OLD
CREATE OR REPLACE TRIGGER T1
BEFORE
INSERT OR UPDATE
ON TABELA
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
NULL;
END;
/
AFTER
Klauzuli AFTER używamy aby uruchomić wyzwalacz po zdarzeniu go wywołującym.
Dla wyzwalaczy działających na wierszach , wyzwalacz jest uruchamiany po zmianie każdego wiersza.
Ograniczenia:
- Nie można utworzyć wyzwalacza BEFORE na obiektach VIEW lub OBJECT VIEW.
- Ne można ustalać wartości dla zmiennych :NEW i :OLD
CREATE OR REPLACE TRIGGER T1
AFTER
INSERT OR UPDATE
ON TABELA
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
NULL;
END;
/
AFTER [INSERT/UPDATE] ON KOLUMNA
CREATE OR REPLACE TRIGGER T1
AFTER
INSERT OR UPDATE OF TABELA
ON KOLUMNA
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
NULL;
END;
/
STATEMENT
CREATE OR REPLACE TRIGGER T1
AFTER
INSERT OR DELETE OR UPDATE OF TABELA
ON KOLUMNA
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
NULL;
END;
/
Klauzula WHEN
WHEN (NEW.SAL < 100) (NEW bez znaku :)
Włączenie/ Wyłączanie pojedynczego wyzwalacza:
ALTER TRIGGER NAZWA_TRG DISABLE;
ALTER TRIGGER NAZWA_TRG ENABLE;
Włączenie/ Wyłączanie wszystkich wyzwalaczy na tabeli:
ALTER TABLE TABELA DISABLE ALL TRIGGERS;
ALTER TABLE TABELA ENABLE ALL TRIGGERS;
Wyzwalacze systemowe
BEFORE LOGON
BEFORE CREATE
BEFORE ALTER
BEFORE DROP
BEFORE AUDIT
BEFORE NOAUDIT
BEFORE DDL
BEFORE GRANT
BEFORE RENAME
BEFORE REVOKE
AFTER LOGON
AFTER CREATE
AFTER ALTER
AFTER DROP
AFTER AUDIT
AFTER NOAUDIT
AFTER DDL
AFTER GRANT
AFTER RENAME
AFTER REVOKE
CREATE OR REPLACE TRIGGER TRG1
AFTER LOGON ON SCHEMA
BEGIN
INSERT INTO TABELA
(KOMUNIKAT
)
VALUES ('zalogowano sie' || SYSDATE
);
END;
Obsługa rodzaju instrukcji DML
BEGIN
IF INSERTING THEN
NULL;
END IF;
IF UPDATING THEN
NULL;
END IF;
END;
Literatura:
[1] Oracle® Database SQL Reference 10g Release 2 (10.2) B14200-02