触发器,ORACLE,该如何解决
触发器,ORACLE
上面是我写的触发器语句,我实现的是更新了一条数据之后,就把lastmodify这个字段的值更改成为系统时间,触发器语法没有错误,但是我执行了下面的语句后出现了问题:
错误信息如下:
求大神解决了,今天关于这个的问题问了好多个了,唉!大神你们在哪里?
------解决方案--------------------
对于after 类型的for each row 级别的triggers,不论哪种insert语句触发了trigger,都不允许在 trigger 中访问本trigger所依赖的table的
你应该修改为Before类型的,直接改新增数据行对应字段的值就好了,比如:
select sysdate into :new.update_date from dual;
或者
:new.update_date = sysdate;
create or replace TRIGGER person_last_modify_trigger
after update on FROM_PERSON_QUERY
for each row
BEGIN
update FROM_PERSON_QUERY set LASTMODIFY=SYSDATE where SERIAL_NUMBER=:new.SERIAL_NUMBER;
END;
上面是我写的触发器语句,我实现的是更新了一条数据之后,就把lastmodify这个字段的值更改成为系统时间,触发器语法没有错误,但是我执行了下面的语句后出现了问题:
update FROM_PERSON_QUERY set FORM_STATE='hehasfd' where id=1111;
错误信息如下:
[SQL]update FROM_PERSON_QUERY set FORM_STATE='hehasfd' where id=1111
[Err] ORA-04091: 表 SZQ.FROM_PERSON_QUERY 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SZQ.PERSON_LAST_MODIFY_TRIGGER", line 2
ORA-04088: 触发器 'SZQ.PERSON_LAST_MODIFY_TRIGGER' 执行过程中出错
求大神解决了,今天关于这个的问题问了好多个了,唉!大神你们在哪里?
------解决方案--------------------
对于after 类型的for each row 级别的triggers,不论哪种insert语句触发了trigger,都不允许在 trigger 中访问本trigger所依赖的table的
你应该修改为Before类型的,直接改新增数据行对应字段的值就好了,比如:
select sysdate into :new.update_date from dual;
或者
:new.update_date = sysdate;