在我的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内容。
希望对您有所帮助。