Poniżej znajduje się przykład wyzwalacza Oracle PRZED WSTAWIENIEM LUB AKTUALIZACJĄ do przeprowadzania walidacji podczas wstawiania lub aktualizowania rekordów w tabeli EMP.
Przykład wyzwalacza Oracle PRZED WSTAWIENIEM LUB AKTUALIZACJĄ
Poniższy wyzwalacz wykona następujące dwa sprawdzenia w tabeli EMP. (1) W przypadku wstawiania rekordów sprawdza, czy kolumna prowizji nie jest wyższa niż 500. (2) W przypadku aktualizacji sprawdza, czy kolumna JOB nie powinna być ustawiona jako pusta.
CREATE OR REPLACE TRIGGER TRIG_EMP_BEF_UPD_INS BEFORE INSERT OR UPDATE ON EMP FOR EACH ROW BEGIN IF INSERTING THEN /* commission should not be greater than 500, for new record*/ IF :new.comm > 500 THEN raise_application_error ( -20001, 'Commission should not be greater than 500.'); END IF; ELSIF UPDATING THEN /* check for column JOB should not be set as null while update*/ IF :new.job IS NULL THEN raise_application_error (-20001, 'Column JOB should have a value.'); END IF; END IF; END;
Testuj powyżej wyzwalacza dla instrukcji Insert
Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Values (7399, 'A.SMITH', 'CLERK', 7902, TO_DATE('12/17/1980 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 800, 550, 20);
Wyjście
Error at line 1 ORA-20001: Commission should not be greater than 500. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 6 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 1.
Przetestuj powyżej wyzwalacz dla oświadczenia o aktualizacji
UPDATE EMP SET sal = 900, job = NULL WHERE empno = 7499;
Wyjście
Error at line 2 ORA-20001: Column JOB should have a value. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 12 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 2.
Możesz przetestować ten wyzwalacz w swoim schemacie, pobierając tabele demonstracyjne z następującego linku Pobierz skrypt Scott Schema.
Zobacz też:
- Jak korzystać z globalnych tabel tymczasowych w procedurze Oracle?
- Przykład wyzwalacza Oracle z klauzulą WHEN
- Typ tabeli w przykładzie procedury Oracle
-
Miej dane wyjściowe PL/SQL w czasie rzeczywistym
-
java.sql.SQLException:błąd we/wy:reset połączenia na serwerze linux
-
Dodaj parametr daty do zapytania Oracle
-
Oracle:Wyszukiwanie pełnotekstowe z warunkiem
-
Oracle UTL_SMTP:przykład wysyłania poczty z załącznikiem przy użyciu uwierzytelniania portfela Oracle