Následuje příklad spouštění Oracle BEFORE INSERT OR UPDATE Trigger pro provádění ověření při vkládání nebo aktualizaci záznamů v tabulce EMP.
Oracle PŘED VLOŽENÍM NEBO AKTUALIZACÍ Příklad spouštěče
Níže uvedený spouštěč provede následující dvě kontroly tabulky EMP. (1) Při vkládání záznamů zkontroluje, zda sloupec provize není vyšší než 500. (2) Při aktualizaci zkontroluje, že sloupec JOB by neměl být nastaven jako null.
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;
Test výše spouštěče pro vložení příkazu
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);
Výstup
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.
Test výše spouštěče pro aktualizaci prohlášení
UPDATE EMP SET sal = 900, job = NULL WHERE empno = 7499;
Výstup
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.
Tento spouštěč můžete otestovat ve svém schématu stažením ukázkových tabulek z následujícího odkazu Stáhnout skript Scott Schema.
Viz také:
- Jak používat globální dočasné tabulky v Oracle Procedure?
- Oracle Trigger s příkladem klauzule WHEN
- Typ tabulky v příkladu procedury Oracle