【发布时间】:2011-04-11 14:24:59
【问题描述】:
简单的一个。我是 PLSql 的新手,oracle 的错误消息永远不会太有帮助。
我想做一个简单的触发器来更新具有当前日期的列,即表的“修改日期”列。但是遇到了一个奇怪的错误。
想法很简单
create table test1 (tcol varchar2(255), tcol2 varchar2(255))
CREATE OR REPLACE TRIGGER testTRG
AFTER INSERT OR UPDATE ON test1
FOR EACH ROW
BEGIN
update test1
set tcol2 = to_char(sysdate)
where tcol = :OLD.tcol;
END;
insert into test1 (tcol) values ('test1');
这会弹出错误:
ORA-04091: table RAIDBIDAT_OWN.TEST1 is mutating, trigger/function may not see it
ORA-06512: at "RAIDBIDAT_OWN.TESTTRG", line 2
ORA-04088: error during execution of trigger 'RAIDBIDAT_OWN.TESTTRG'
有人能快速解决这个问题吗?
干杯,
f.
【问题讨论】:
-
既然你说表有一个目标列的varchar,我建议你做
to_char(sysdate, <date_time_mask>,即to_char(sysdate, 'YYYY-MM-DD HH24:Mi:SS'),以明确存储日期的格式,而不是隐含接受NLS_DATE_FORMAT,对于不同的会话可能不同。
标签: oracle plsql triggers ora-04091 mutating-table