Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ADODB时未捕获Oracle触发器错误_Oracle_Triggers_Adodb - Fatal编程技术网

使用ADODB时未捕获Oracle触发器错误

使用ADODB时未捕获Oracle触发器错误,oracle,triggers,adodb,Oracle,Triggers,Adodb,我有一个应用程序,它使用Adodb在Oracle表(客户数据库)中插入数据 如果没有错误,则成功插入数据 若有任何错误,如无效数据类型等,我的应用程序将引发并捕获错误,并将其转储到日志gile中 我的客户已经在这个特定的表上编写了他们自己的触发器。当插入一条记录时,在插入数据之前很少进行其他检查 现在一切都好了 但最近我们发现很多时候数据都没有插入到oracle表中 签入日志文件时未发现任何错误 然后我记录了执行的查询 将查询复制到oracle Sql提示符并执行,但给出了错误触发器 我的问题是

我有一个应用程序,它使用Adodb在Oracle表(客户数据库)中插入数据

  • 如果没有错误,则成功插入数据
  • 若有任何错误,如无效数据类型等,我的应用程序将引发并捕获错误,并将其转储到日志gile中
  • 我的客户已经在这个特定的表上编写了他们自己的触发器。当插入一条记录时,在插入数据之前很少进行其他检查
  • 现在一切都好了

    但最近我们发现很多时候数据都没有插入到oracle表中

  • 签入日志文件时未发现任何错误
  • 然后我记录了执行的查询
  • 将查询复制到oracle Sql提示符并执行,但给出了错误触发器
  • 我的问题是

  • 客户尚未准备好分享触发器的详细信息
  • 插入到oracle表时未引发错误,因此我们无法记录该错误或采取任何操作
  • 在oracle中直接执行相同的qry时,将显示触发器错误
  • 需要帮助

  • 为什么不在ADODB中引发错误
  • 我是否必须通知客户实施任何错误提升
  • 你能为解决这个问题提出什么建议吗
  • 我对Oracle有0%到10%的了解

    我从未使用过adodb(我假设您使用的是adodb,而不是ADO.NET?)。。但是,快速浏览一下它的参考资料,就会得出这个问题。。您是否确实在检查查询的返回状态

    $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触发器以记录错误(例如在文件中,这样就不会回滚)

  • 您可以在日志表中记录业务逻辑
  • 但您必须使用存储过程来记录消息
  • 存储过程应具有pragma事务,以便您的日志数据必须保存在日志表中
  • 您需要知道触发器应该有错误处理——在错误处理中,您必须调用记录的存储过程(其中包含pragma事务)

  • 对没有返回错误消息,因此显示ExecutedSuccessfullyHRMM,非常奇怪。您能确认错误是触发器实际引发异常吗?为adodb会话打开会话跟踪并检查跟踪文件。您能说出手动运行查询时出现了什么错误吗?你能设计一个测试用例来复制这个你可以分享的东西吗?