sql >> Databáze >  >> RDS >> Oracle

Příklad spuštění Oracle před vložením NEBO aktualizací

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
  1. Oracle:rozdíl mezi max(id)+1 a sekvence.nextval

  2. převést sériové číslo Excel Date na běžné datum

  3. Problém s proměnnými vazby Oracle, které správně nepoužívají index

  4. Jak zahrnout výsledky s nerozhodným výsledkem na posledním místě při použití klauzule TOP na serveru SQL Server