oracle行触发器不能读原表的一种解决方法

oracle的触发器分为行触发器和语意级触发器

语意级触发器没怎么弄过,现在写一下对行触发器的感想。

行触发器:
create or replace trigger trigger_name before/instead of/after insert or update or delete on table_name for each row

行触发器可以使用 :new和:old但是我发现行触发器的一个问题,就是如果在这个表上建行级触发器,那么就不能对这个表进行查询啥之类的操作,否则就会报ora-04091,说表内容有变化,然后查询报错。

而我正需要在行触发器上,还得去查这张表,所以就很是头痛,最后用了个很烂的方法解决了。(大家如果谁有好的方法,希望能够告诉我,先感谢一下)我新建了一张(表b)和这张表(表a)一模一样的表,然后在新建的这张表(表b)上建了一个视图b_v,然后在这个视图里面建触发器,用instead of的触发器(好像视图里只能用这种的触发器),然后我发现对这个视图建立的行级触发器,可以继续查询这个视图。所以问题就解决了。我对原表建了个触发器,然后使他的增删改对视图进行增删改,然后视图的触发器再去做具体的事,对我新建的那张表操作。这样终于不报可恶的ora-04091的错误了。问题得以解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值