oracle 触发器或函数不能读它”的出现原因,以及解决方案

alexlee 2023-1-19 393 1/19

一.某次在给某表添加了触发器后,居然直接报错了,对数据库的插入操作居然无法完成了。

1.0 交代下背景,在对表进行插入的同时,又对表字段进行更新。其实很少会出现这样的业务需求,插入自己又更新自己,但有时候做业务就是这么奇怪,会有这样的情况存在,这也导致了下边的问题。

在插入表的时候就报了如下错误 "触发器或函数不能读它".

oracle 触发器或函数不能读它”的出现原因,以及解决方案

一开始看到这个报错有点慌,表都插不进去了,仔细检查一下,就加了个触发器,就报错了,可以断定是触发器引起的 。

oracle 触发器或函数不能读它”的出现原因,以及解决方案

2. 那究竟是什么原因导致了这个问题呢?

主要是插入同一张表,跟更新同一张表,不能同时在一个事务进行,知道了这个原因后,我们就可以去解决了。

3. 解决方案:主要是要将插入跟更新这两个事务区别开来,因为在同一个事务内,所以要声明分开事件提交,确保两个操作不在同一个事务之内。

就没办法在插入的同时,又更新同一条记录,要分个先后顺序。

以下是代码,大家有空可以试一下,应该就可以同时进行两个动作。

create table testtable
(
aa varchar(100)
)

insert into testtable(aa) values('123');

CREATE OR REPLACE TRIGGER testtable_afins AFTER insert
  ON testtable
  FOR EACH ROW
 declare  --这里是关键的地方,在变量申明的地方,指定自定义事务处理。
    pragma autonomous_transaction;
BEGIN
  update testtable set aa='我是触发器' where aa='bbb';
  commit;
END testtable_afins;

以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。

要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。

以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。

要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。

- THE END -
最后修改:2024年1月29日
0

共有 0 条评论