------------------------- orcle of column trigger test-------------
--1 create table
CREATE TABLE test_trigger_ofcol
(
ID_a number,
id_b number,
VALUEa VARCHAR2(30),
valueb varchar2(30)
);
----2 insert
INSERT INTO test_trigger_ofcol VALUES(11,111,'WANG','hehe');
INSERT INTO test_trigger_ofcol VALUES(22,333,'KKKKK','heihei');
commit;
SELECT * FROM test_trigger_ofcol;
-------------------------------
ID_A ID_B VALUEA VALUEB
11 111 WANG hehe
22 333 KKKKK heihei
-----------------------------------
--3create trigger
CREATE OR REPLACE TRIGGER TRI_TEST
BEFORE INSERT OR UPDATE
of ID_A
ON test_trigger_ofcol
FOR EACH ROW
--DECLARE
--PARGMA AUTONOMOUS_TRANSACTION;--//声明自治事务,如果没有这个自治声明,是不能修改本表数据的,(关键)
BEGIN
IF INSERTING
THEN
:NEW.ID_B:=:NEW.ID_B+4;
END IF;
IF UPDATING
THEN
:NEW.ID_A:=:OLD.ID_A+6;
END IF;
END ;
--4验证INSERT 操作。因为ID_A被插入值,因此触发触发器 IF INSERTING块。执行结果如下。
INSERT INTO test_trigger_ofcol VALUES(1111,1111,'WWWWW','hehehe');
SELECT * FROM test_trigger_ofcol;
-------------------------------
ID_A ID_B VALUEA VALUEB
11 111 WANG hehe
22 333 KKKKK heihei
1111 1115 WWWWW hehehe
----5 验证 UPDATE操作
----因为我修改的是ID_B字段的值,因此 触发器 并没有被触发。因为我触发器是建立在针对 ID_A字段上的。
update test_trigger_ofcol set id_b=113 where id_a=11;
SELECT * FROM test_trigger_ofcol;
------------------
ID_A ID_B VALUEA VALUEB
11 113 WANG hehe
22 333 KKKKK heihei
1111 1115 WWWWW hehehe
-------6 UPDATE 操作 修改ID_A 触发器被触发。
update test_trigger_ofcol set id_a=20 where id_b=333;
SELECT * FROM test_trigger_ofcol;
--------------------
ID_A ID_B VALUEA VALUEB
11 113 WANG hehe
28 333 KKKKK heihei
1111 1115 WWWWW hehehe
-----结论1:OF COLUMN 触发器不会锁自身表。ID_A原值是 22 虽然我要把ID_A修改=20 但是,触发器被触发,ID_A被修改为了 原值+6 即:22+6=28
-----结论2:本表自治事务无须声明 DECLARE PARGMA AUTONOMOUS_TRANSACTION;
作者: 网友--KK
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




