如何在informix中获取以前执行的sql

时间:2012-11-28 18:52:49

标签: informix embedded-sql dbaccess

在我的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程序上执行此操作?

非常感谢

1 个答案:

答案 0 :(得分:1)

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

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

  1. 连接到数据库以进行主程序处理。
  2. 识别SessionID并捕获变量。
  3. 使用全新连接连接到sysmaster数据库。
  4. 开始处理主连接。
  5. 当主连接处理因错误而失败时,请使用带有SessionID的辅助连接作为参数来获取SQL等。
  6. 希望这有帮助。