幽兰生空谷
--绝世独自开

Oracle批量插入触发器报ORA-06512, ORA-04088

背景介绍:

原来做xxl-job定时任务时,代码都可以正常跑,数据也可以正常插入,项目日志也没有报错。

久而久之,问题出现了,xxl-job本身捕捉的日志不断的打印项目输出的错误,项目中并没有任何报错。

报错信息:

ORA-06512: at "HDYYXYWEB.ZX_CHL_CALLMSG_DOC_TRI", line 5\nORA-04088: error during execution of trigger 'HDYYXYWEB.ZX_CHL_CALLMSG_DOC_TRI'

分析:

报错提示触发器错误,可是我写代码时并没有涉及到触发器(不太会~)呀,然后就开始去数据库中找触发器,虽然我看不太懂,但是我会搜索,~

下面是触发器示例:

CREATE OR REPLACE trigger HDYYXYWEB.ZX_CHL_CALLMSG_DOC_TRI
  before insert on zx_chl_callmsg_doc  
  for each row
Declare
  -- local variables here
Begin
  If :new.msgid Is Null Then
    Select hdyyxy.zx_chl_callmsgseq.nextval Into :new.msgid From dual;
  End If;
End zx_chl_callmsg_doc_tri;

代码解释:

这是一个 Oracle 数据库中的触发器(trigger),名为 ZX_CHL_CALLMSG_DOC_TRI,用于在向表 ZX_CHL_CALLMSG_DOC 插入新记录之前执行一些操作。让我们逐行解释这段触发器的代码:

CREATE OR REPLACE TRIGGER HDYYXYWEB.ZX_CHL_CALLMSG_DOC_TRI: 这是创建或替换触发器的语法,HDYYXYWEB 是该触发器所属的模式(schema)名。

BEFORE INSERT ON ZX_CHL_CALLMSG_DOC: 触发器的触发时机是在向表 ZX_CHL_CALLMSG_DOC 中插入新记录之前执行。

FOR EACH ROW: 这表示该触发器是行级触发器,将为每个插入操作的行执行一次。

Declare: 这是一个可选部分,在这里可以定义局部变量。在这段代码中,没有定义局部变量。

BEGIN: 触发器代码的开始标记。

If :new.msgid Is Null Then: 这是一个条件判断语句,检查被插入的新行的 msgid 字段是否为空(Null)。

Select hdyyxy.zx_chl_callmsgseq.nextval Into :new.msgid From dual;: 如果 msgid 为空,则执行这条 SQL 语句。它从名为 hdyyxy.zx_chl_callmsgseq 的序列中获取下一个值,并将其赋值给触发器中的 :new.msgid。:new.msgid 是一个特殊的引用,表示新插入行的 msgid 字段。

End zx_chl_callmsg_doc_tri;: 触发器代码的结束标记。

该触发器的目的是在向 ZX_CHL_CALLMSG_DOC 表插入新记录时,如果新记录的 msgid 字段为空,就从序列 hdyyxy.zx_chl_callmsgseq 中获取下一个值,并填充到 msgid 字段中,以保证该字段的唯一性和自增特性。

注意:

这时,我注意到了FOR EACH ROW: 这表示该触发器是行级触发器,将为每个插入操作的行执行一次。 这句话。

我开始怀疑时我的插入语句为批量插入导致触发器报错。

解决方案:

由于不太会触发器,我就把批量插入,改为了单条记录插入,因为数据量不多,故采用了这种方案。

赞(1) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Oracle批量插入触发器报ORA-06512, ORA-04088》
文章链接:https://www.itheibai.com/archives/1303
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

养成“打赏”的好习惯,从我做起!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册