3

在我的 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”。有没有办法在informix中得到这个?并且 [可以在 ESQL 程序上进行吗?

非常感谢

4

1 回答 1

1

您走在正确的轨道上,但是如果您使用相同的连接来运行这些 SQL 语句,那么它们的成功执行当然会消除前一条语句中的信息。(事实上​​,它几乎是一个完美的海森虫示例。)

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

  1. 连接到数据库进行主程序处理。
  2. 识别 SessionID 并捕获到变量。
  3. 使用新连接连接到 sysmaster 数据库。
  4. 在主连接上开始处理。
  5. 当主连接处理失败并报错时,使用以SessionID为参数的辅助连接获取SQL等。

希望这会有所帮助。

于 2012-11-29T01:17:41.083 回答