#oracle #plsql
#Oracle #plsql
Вопрос:
Я хочу создать механизм протоколирования ошибок и отладки для моего кода PLSQL. Будет таблица log_Error, в которую я буду вставлять ошибки / отладки.
Я планирую периодически вставлять отладки в свой код, чтобы мне было легко определить, до какого момента выполняется мой код
В разделе исключения я буду вставлять сообщения об ошибках в эту таблицу журнала.
Кроме того, мне нужен механизм, с помощью которого я мог бы включить этот механизм протоколирования для определенного сеанса вместо всех сеансов по умолчанию. Если это протоколирование выполняется по умолчанию, это окажет ненужное влияние на производительность и создаст ненужные журналы
Можете ли вы, пожалуйста, предложить подход, при котором я могу включить / отключить механизм протоколирования для сеанса вручную?
Комментарии:
1. Если вы делаете это как личный проект, вполне справедливо. Но если вы пишете пакет протоколирования для работы, я предлагаю вам этого не делать. Вместо этого вам следует использовать библиотеку с открытым исходным кодом
logger
. Это самое близкое, что у нас есть, к отраслевому стандарту протоколирования PL / SQL. Найдите это здесь
Ответ №1:
Вы можете создать небольшой пакет протоколирования, в котором вы устанавливаете флаг для каждого сеанса следующим образом
create package debug_log_pk as
bLogflag boolean := false;
end debug_log_pk;
затем создайте процедуру, которая вставляет данные в вашу таблицу:
create or replace procedure log_error( ..... )
as
pragma autonomous_transaction;
begin
if debug_log_pk.bLogflag then
insert into logging_table (...) values (...);
commit;
end if;
end;
Где-то в вашей program. set:
debug_log_pk.bLogflag := true;
Это можно сделать в любом месте кода вашего приложения, прежде чем вы захотите войти в систему, и будет применяться для сброса сеанса. И вы также можете отключить протоколирование 🙂
Также pragma autonomous_transaction; помещает протоколирование в отдельную транзакцию, чтобы оно выдержало откат в БД.
Также взгляните на это: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1171766400346817259