Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 Как определить номер строки, где происходит ошибка в процедуре  [new]
Rodion
Member

Откуда:
Сообщений: 32
Привет Всем !
IDS 9.21
Есть ли метод определения номера строки, где происходит ошибка в процедуре?
или какая команда выполнялась в момент ошибки?
Trace и метод изменения значения какой-л переменной при каждой команде не подходят,
тк процедура вызывается очень часто и должна быстро
отработать. Кроме того она довольно громоздка , и вклинивать куски кода, переопределяющие мою переменную, очень накладно.
Спасибо .
5 июл 05, 11:24    [1675080]     Ответить | Цитировать Сообщить модератору
 Re: Как определить номер строки, где происходит ошибка в процедуре  [new]
Bill'и
Guest
Для выявления воспроизводимой ошибки - ServerStudio, а вот если нет и
автор
"вызывается очень часто и должна быстро отработать"
, я использую следующий вариант:

0. Создаю в БД постоянную таблицу для хранения инфо об ошибках, возникающих
в "плохих" но очень важных ХП

1. Создаю при старте приложения _временную_ таблицу _без логирования_
(например с именем tmpSPError) - во-первых с ней работа выполняется быстрее,
во-вторых - в случае отката транзакции при ошибке записи иэ этой таблицы не
пропадут!

2. "Плохую" ХП оформляю следующим образом:

CREATE PROCEDURE BLA_BLA...


DEFINE ...

  DEFINE SQL_error_var  SMALLINT;     -- SQL код
  DEFINE ISAM_error_var SMALLINT;     -- ISAM код
  DEFINE error_data_var VARCHAR(250); -- текст ошибки
  DEFINE v_milestone    SMALLINT; -- номер "этапа" :)

  BEGIN
      BEGIN ON EXCEPTION SET SQL_error_var, ISAM_error_var, error_data_var
        INSERT INTO tmpSPError(SQL_error, ISAM_error, error_data)
          VALUES (SQL_error_var, ISAM_error_var, error_data_var);
        RAISE EXCEPTION -746, 0,
          "Ошибка в ХП BLA_BLA на этапе " || v_milestone;
      END EXCEPTION;

    LET v_milestone = 1;
    .... первый кусок кода
    LET v_milestone = 2;
    .... второй кусок кода
   ...
END;

END PROCEDURE;
3. При финише приложения переписываю записи из временной таблицы в
основную...

4. В принципе всё :)
6 июл 05, 14:14    [1680323]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить