使用ADODB时未捕获Oracle触发器错误
我有一个应用程序,它使用Adodb在Oracle表(客户数据库)中插入数据使用ADODB时未捕获Oracle触发器错误,oracle,triggers,adodb,Oracle,Triggers,Adodb,我有一个应用程序,它使用Adodb在Oracle表(客户数据库)中插入数据 如果没有错误,则成功插入数据 若有任何错误,如无效数据类型等,我的应用程序将引发并捕获错误,并将其转储到日志gile中 我的客户已经在这个特定的表上编写了他们自己的触发器。当插入一条记录时,在插入数据之前很少进行其他检查 现在一切都好了 但最近我们发现很多时候数据都没有插入到oracle表中 签入日志文件时未发现任何错误 然后我记录了执行的查询 将查询复制到oracle Sql提示符并执行,但给出了错误触发器 我的问题是
$ok = $DB->Execute("update atable set aval = 0");
if (!$ok) mylogerr($DB->ErrorMsg());
“将查询复制到oracle Sql prompt并执行,但给出了错误触发器。”由于ADO会话未报告错误,可能是触发器的错误具有误导性。它可能只是在“嘿,除非通过应用程序,否则不允许您插入此表”行上进行检查
“插入到oracle表时未引发错误,因此我们无法记录该错误或采取任何操作。”
如果插入时未引发错误,则可能在提交时引发。延迟约束和物化视图可以提供这一点
假设我可以复制你的经历如下:
1.创建一个表选项卡,该选项卡具有一个最初延迟的可延迟约束(例如val_a>10)
2.ADO会话插入违反约束的行,但不会出错,因为约束被延迟
3.提交发生,约束冲突异常触发,事务回滚而不是提交
因此,请查看您是否在考虑提交过程中出错的可能性
它也可能是事务中稍后导致整个事务回滚的其他内容(例如死锁)。会话跟踪会很好。否则,请查看用户上的SERVERERROR触发器以记录错误(例如在文件中,这样就不会回滚)
对没有返回错误消息,因此显示ExecutedSuccessfullyHRMM,非常奇怪。您能确认错误是触发器实际引发异常吗?为adodb会话打开会话跟踪并检查跟踪文件。您能说出手动运行查询时出现了什么错误吗?你能设计一个测试用例来复制这个你可以分享的东西吗?