Как создать журнал ошибок для хранимой процедуры в Oracle 10g? - PullRequest
3 голосов
/ 13 ноября 2010

Мне нужен пример создания файла журнала ошибок для хранимой процедуры в Oracle.приведите, пожалуйста, пример создания таблиц и хранимых процедур, а также создания журнала ошибок.

Заранее спасибо

РЕДАКТИРОВАТЬ (соответствующая информация из другого вопроса)

Предположим, существует хранимая процедура.Когда я выполняю эту хранимую процедуру, может возникнуть некоторая ожидаемая ошибка / исключение, поэтому мне нужно создать таблицу журнала ошибок, в которой все ошибки будут автоматически сохраняться при каждом выполнении хранимой процедуры.

Например,, если есть какой-то столбец, который не допускает нулевых значений, но пользователь вводит нулевые значения, то эта ошибка должна быть сгенерирована и сохранена в таблице журнала ошибок.

Ответы [ 2 ]

5 голосов
/ 13 ноября 2010

Вы не очень подробно рассказали о своих требованиях.Вот простая таблица журнала ошибок и процедура для записи в нее сообщений об ошибках:

CREATE TABLE error_log (ts TIMESTAMP NOT NULL, msg VARCHAR2(4000));

CREATE PROCEDURE log_error (msg IN VARCHAR2) IS
BEGIN
  INSERT INTO error_log (ts, msg)
  VALUES (SYSTIMESTAMP, SUBSTR(insert_log.msg, 1, 4000));
END log_error;

Может потребоваться или не потребоваться, чтобы это была автономная транзакция.Это будет зависеть от того, хотите ли вы, чтобы журнал записывал ошибки от процедур, выполняющих откат их изменений.

Как правило, это будет реализовано в более общей системе ведения журналов, которая будет регистрировать не только ошибки, но и предупреждения и отладочную информацию..

Если вы хотите, чтобы инструкция DML (вставка / обновление / удаление) регистрировала ошибку для каждой строки (вместо того, чтобы просто давать сбой в первой строке с ошибками), вы можете использовать предложение LOG ERRORS - вместоесли оператор потерпел неудачу, оператор выполнится успешно, и строки, которые не были вставлены / обновлены / удалены, будут записаны в указанную вами таблицу журнала ошибок вместе с кодом ошибки и соответствующим сообщением об ошибке.Обратитесь по ссылке, предоставленной vettipayyan.

Если вы хотите, чтобы регистрировались все исключения, возникающие в процедуре, вы можете перехватить их, КОГДА ДРУГИЕ:

BEGIN
  -- your code here
EXCEPTION
  WHEN OTHERS THEN
    log_error(DBMS_UTILITY.format_error_stack);
    log_error(DBMS_UTILITY.format_error_backtrace);
    RAISE;
END;
2 голосов
/ 13 ноября 2010

Вот страница с кодами:
DML ErrorLogging

...