Oracle触发器insert批量插入时报错

叫我三三 2016-02-24 06:36:52

create or replace trigger T_AUTH
before insert
on T
for each row
declare
-- local variables here
begin
Select NVL(MIN(AUTH_DATE),sysdate) into :NEW.AUTH_DATE FROM T WHERE AUTH_CODE = :new.auth_code;
Select MAX(AUTH_NUM) INTO :NEW.AUTH_NUM FROM T WHERE AUTH_CODE = :new.auth_code;

IF :NEW.AUTH_NUM IS NULL
THEN
Select NVL(MAX(AUTH_NUM),0) + 1 into :NEW.AUTH_NUM FROM T WHERE trunc(AUTH_DATE - SYSDATE) = 0;
END IF;

:new.createdate := sysdate();
:new.lastdate := sysdate();
end T_AUTH;

这是触发器的内容,在单个 insert 执行没有问题,
但是使用insert into select 批量插入数据时就会报错
ORA-04091:表发生了变化,触发器不能读它。
求解决方法,谢谢!
...全文
458 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
陶小淘 2016-02-25
  • 打赏
  • 举报
回复
你这个触发器 看上去不知道起什么作用? Select NVL(MIN(AUTH_DATE),sysdate) into :NEW.AUTH_DATE FROM T WHERE AUTH_CODE = :new.auth_code; Select MAX(AUTH_NUM) INTO :NEW.AUTH_NUM FROM T WHERE AUTH_CODE = :new.auth_code; select into 语句最好定义变量传入。into :new.auth_date 这样感觉很不规范
卖水果的net 2016-02-25
  • 打赏
  • 举报
回复
行触发器,不能读也不能写表自身。 看你这段代码,前几行似乎没什么实际用。
叫我三三 2016-02-25
  • 打赏
  • 举报
回复
没人知道吗?

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧