我在工作中遇到在insert的时候需要对insert的数据进行变更,很自然就想到了触发器,触发器格式如下:
CREATE OR REPLACE TRIGGER tir_updateDate
AFTER INSERT ON sc_t_czplanFOR EACH ROWBEGIN
UPDATE sc_t_czplan
SET cdate= to_char(:new.PLANDATE,'mm')||'月'||to_char(:new.PLANDATE,'dd')||'日';
WHERE planid= :new.planid;END; 
但在调用的时候报如下错误:
16:38:45 Error: ORA-04091: 表 SCOTT.TEST 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SCOTT.TEST_TRIGGER", line 9
ORA-04088: 触发器 'SCOTT.TEST_TRIGGER' 执行过程中出错
ORA-06512: 在 line 2
在网上查了好多方法,都不见效,想到既然是在insert之前触发的何不修改对应的值来解决问题呢?
将tigger做如下改动:
CREATE OR REPLACE TRIGGER tir_updateDate
BEFORE INSERT ON sc_t_czplan
FOR EACH ROW -- 行级触发器,默认为表级触发器
BEGIN
:new.cdate:=to_char(:new.PLANDATE,'mm')||'月'||to_char(:new.PLANDATE,'dd')||'日';
END tir_updateDate;
问题即随之解决,将自己的办法贴出来,希望能够给遇到类似问题的朋友们一点帮助。