Как получить предыдущий выполненный sql в informix

В моей программе esql, когда sql завершается неудачно и генерирует исключение, я хочу напечатать SQL, который сгенерировал исключение. Для этого мне нужно выяснить, как получить ранее выполненный SQL. Я использую Inforix 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);

Все они получают сам по себе. Например, если я бегу select * from sysmaster:sysconblock он показывает "select * from sysmaster:sysconblock" в последнем выполненном. Есть ли способ получить это в Informix? и можно ли это сделать в программе ESQL?

Большое спасибо

1 ответ

Вы на правильном пути, но если вы используете то же соединение для запуска этих операторов SQL, то, конечно, их успешное выполнение стирает информацию из предыдущего оператора. (На самом деле это почти идеальный пример heisenbug.)

Что вам нужно сделать, это создать второе соединение с базой данных и использовать его для опроса содержимого sysmaster для основного соединения, которое не удалось.

  1. Подключение к базе данных для обработки основной программы.
  2. Определите SessionID и перехватите переменную.
  3. Подключение к базе данных sysmaster с новым подключением.
  4. Начать обработку на главном соединении.
  5. Когда обработка основного соединения завершается с ошибкой, используйте вторичное соединение с SessionID в качестве параметра для получения SQL и т. Д.

Надеюсь, это полезно.

Другие вопросы по тегам