Oracle
 sql >> база данни >  >> RDS >> Oracle

Пример за задействане на Oracle преди вмъкване ИЛИ актуализиране

Следва пример за тригер на Oracle BEFORE INSERT OR UPDATE за извършване на валидации, докато вмъквате или актуализирате записите в таблицата EMP.

Пример на задействане на Oracle ПРЕДИ ВМЕСВАНЕ ИЛИ АКТУАЛИЗИРАНЕ

Тригерът по-долу ще направи следните две проверки на EMP таблица. (1) Ако вмъкне записите, ще провери колоната за комисионна да не е по-висока от 500. (2) Ако се актуализира, тогава ще провери дали колоната JOB не трябва да бъде зададена като нула.

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;

Тест над тригера за вмъкване на изявление

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

Изход

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.

Тест над тригера за изявление за актуализиране

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

Изход

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.

Можете да тествате този тригер във вашата схема, като изтеглите демонстрационните таблици от следната връзка Изтеглете скрипта на Scott Schema.

Вижте също:

  • Как да използвам глобални временни таблици в процедурата на Oracle?
  • Пример за тригер на Oracle с клауза WHEN
  • Тип таблица в пример за процедура на Oracle
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. алтернатива на listagg в Oracle?

  2. Как да създадете PL/SQL пакети в базата данни на Oracle

  3. PLS-00428:в този оператор SELECT се очаква клауза INTO

  4. ORA-16789:дневниците за повторно изпълнение в режим на готовност са конфигурирани неправилно

  5. Как да създадете чужд ключ в Oracle SQL Developer?