⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trigger_when.txt

📁 orale培训教材包括了所有的sql说明和实例
💻 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 + -