📄 trigger_when.txt
字号:
--验证行级触发器的when语句的作用是使触发器只对满足when 条件的行触发。
--update普通纪录sal=10001,被trigger挡住。job='PRESIDENT'因为WHEN条件不满足,TRIGGER未触发,UPDATE OK
CREATE TRIGGER scott.salary_check
BEFORE
UPDATE ON scott.emp
FOR EACH ROW
WHEN (new.job <> 'PRESIDENT')
BEGIN
--在trigger中以dept表的更改值更改emp(约束表)
IF :new.sal>10000
THEN
RAISE_APPLICATION_ERROR (-20506, 'salary too high');
END IF;
END;
insert into emp (empno,job,sal) values(4,'hunter',100);
update emp set sal=10001 where empno=4;
*
ERROR at line 1:
ORA-20506: salary too high
ORA-06512: at "SCOTT.SALARY_CHECK", line 5
ORA-04088: error during execution of trigger 'SCOTT.SALARY_CHECK'
insert into emp (empno,job,sal) values(5,'PRESIDENT',100);
update emp set sal=10001 where empno=5;
--1 row updated.
--当一次更新多条纪录,触发器被多次触发,如果其中一次触发引起RAISE_APPLICATION_ERROR
--则dml不会成功。因为sql中把一句sql文当作一个单元。要么成功,要么失败。
--不能一句sql文更新3条纪录,两条成功,一条失败。
update emp set sal=10002 where (empno=5 or empno=4 or empno=7984);
------------------------------OLD.
CREATE OR REPLACE TRIGGER scott.salary_check
BEFORE
UPDATE ON scott.emp
FOR EACH ROW
WHEN (old.job <> 'PRESIDENT')
BEGIN
--在trigger中以dept表的更改值更改emp(约束表)
IF :new.sal>10000
THEN
RAISE_APPLICATION_ERROR (-20506, 'salary too high');
END IF;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -