在我的esql程序上,当sql失败并生成异常时,我要打印生成异常的SQL。为此,我需要找出如何获取先前执行的SQL。我正在运行informix 11.5。
我尝试了以下方法,但没有任何效果

select * from sysmaster:sysconblock where cbl_sessionid in (select dbinfo('SessionId') from sysmaster:syssqlstat);

SELECT scs_sqlstatement FROM sysmaster:syssqlcurses WHERE scs_sessionid in (select dbinfo('SessionId') from sysmaster:syssqlstat);

所有这些都得到它自身的sql。例如,如果我运行select * from sysmaster:sysconblock,它将在最后一次执行时显示“select * from sysmaster:sysconblock”。有什么办法可以在notifyix中获得此功能?并且[可以在ESQL程序上进行吗?

非常感谢

最佳答案

您的方向是正确的,但是如果您使用相同的连接来运行这些SQL语句,那么当然,它们的成功执行将抹去前一条语句中的信息。 (实际上,这几乎是heisenbug的完美示例。)

您需要做的是创建与数据库的第二个连接,并使用该连接为失败的主连接询问sysmaster内容。

  • 连接到数据库以进行主程序处理。
  • 标识SessionID并捕获到变量。
  • 使用新连接连接到sysmaster数据库。
  • 在主连接上开始处理。
  • 如果主连接处理失败并出现错误,请使用带有SessionID作为参数的辅助连接来获取SQL等。

  • 希望对您有所帮助。

    10-08 20:09