【发布时间】:2017-11-08 19:51:27
【问题描述】:
我正在使用 ORACLE 12c。
在一张表上,我有 2 个触发器,都是“更新前”。 其中一个触发器在更新列时触发,并且在此触发器中另一列获得新值。第二个触发器应该在更新第二列时触发。但他没有。
create table TRIGGER_TEST
(
col1 varchar2(64),
col2 varchar2(64),
col3 varchar2(64)
);
create or replace trigger TR_TRIGGER_TEST_1
before update of COL1 on TRIGGER_TEST
for each row
begin
dbms_output.put_line('here we are in TR_TRIGGER_TEST_1');
:new.col2 := 'only testing';
end;
/
create or replace trigger TR_TRIGGER_TEST_2
before update of COL2 on TRIGGER_TEST
for each row
begin
dbms_output.put_line('here we are in TR_TRIGGER_TEST_2');
:new.col3 := 'trigger_test_2 has fired';
end;
/
insert into TRIGGER_TEST values ('1_col1','1_col2','1_col3');
select * from TRIGGER_TEST;
COL1 COL2 COL3
----------------------------------------------------------------
1_col1 1_col2 1_col3
插入行后,我执行更新。我希望 COL1= "现在我们将看到",COL2="only testing" 和 COL3 = "trigger_test_2 has fire"。
update TRIGGER_TEST set COL1 = 'now we will see';
但我得到的是:
select * from TRIGGER_TEST;
COL1 COL2 COL3
----------------------------------------------------------------
now we will see only testing 1_col3
谁能给我解释一下?我真的很确定,对于以前的 ORACLE 版本,这个场景已经奏效了。但现在不行了。
【问题讨论】:
-
欢迎来到 SO!这是你的第一个问题,它写得很好,标题有意义,标签正确,格式很好;它甚至显示你做了什么,并允许人们重现测试。 +1 !
-
.. 如果您想继续以正确的方式使用 SO,here 您会发现有人回答您时该怎么做。
标签: oracle plsql database-trigger