假设我们有一个简单的表格:
ID | Name
1 | "A"
2 | "B"
更新可以
update set Name = "C" where ID = 1
因此,在创建触发器时,我知道如何通过:NEW.
获取新行的信息,但在我尝试时ID不会出现在那里。
如何从新更新的行中获取ID
信息?
答案 0 :(得分:0)
只需将其称为":OLD.column-name" 。
在行级UPDATE触发器中,:OLD
表示在应用更新之前列中的现有值。
在你的情况下,你可以做 -
old_id := :old.ROWID
答案 1 :(得分:0)
你究竟尝试了什么?以下适用于我:
set serveroutput on;
drop table test;
create table test (id number, name varchar2(10));
insert into test values (1, 'A');
insert into test values (2, 'B');
commit;
create or replace trigger test_trg
before update on test
for each row
begin
dbms_output.put_line('id of row being updated is: '||:old.id||' and it''s new value is: '||:new.id);
end;
/
update test
set name = 'C'
where id = 1;
commit;
我得到的输出是:
Table dropped.
Table created.
1 row created.
1 row created.
Commit complete.
Trigger created.
id of row being updated is: 1 and it's new value is: 1
1 row updated.
Commit complete.
请记住,如果您对for-each-trigger-trigger范围所涉及的表进行批处理操作,那么您将把它从set操作转换为row-by - 运行,所以你会看到性能降级。我也会质疑你用触发器做什么;根据我的经验,你可以做大部分事情,而不需要诉诸触发器!