Oracle
 sql >> Database >  >> RDS >> Oracle

Esempio di trigger di Oracle prima dell'inserimento o dell'aggiornamento

Quello che segue è un esempio di Oracle BEFORE INSERT OR UPDATE Trigger per eseguire convalide durante l'inserimento o l'aggiornamento dei record nella tabella EMP.

Oracle PRIMA DI INSERIRE O AGGIORNARE Esempio di trigger

Il trigger seguente eseguirà i seguenti due controlli sulla tabella EMP. (1) Se si inseriscono i record, verificherà che la colonna delle commissioni non sia superiore a 500. (2) In caso di aggiornamento, verificherà che la colonna LAVORO non debba essere impostata come nulla.

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 sopra il trigger per l'istruzione di inserimento

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);

Uscita

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 sopra il trigger per la dichiarazione di aggiornamento

UPDATE EMP
SET sal = 900, job = NULL
WHERE empno = 7499;

Uscita

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.

Puoi testare questo trigger nel tuo schema, scaricando le tabelle demo dal seguente link Scarica script Scott Schema.

Vedi anche:

  • Come utilizzare le tabelle temporanee globali in Oracle Procedure?
  • Trigger Oracle con esempio di clausola WHEN
  • Tipo di tabella nell'esempio di procedura Oracle