2010-11-13 6 views
3

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

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

EDIT (соответствующая информация из другой вопрос)

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

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

+0

Смотрите также [этот ответ на подобный вопрос] (HTTP: // StackOverflow. com/questions/1081297/what-is-effective-way-to-track-ident-and-report-every-error-message-rais/1081941 # 1081941) –

ответ

5

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

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; 
+1

+1, по сути то же самое, что я сделал снова и снова. Определенно посмотрите автономные транзакции - большую часть времени вы хотите, чтобы запись в журнале ESPECIALLY, когда вы попали в ошибку, которая откатывает все! – DCookie

Смежные вопросы