Как вручную создать файл журнала, такой же, как результаты спула SQL * Plus - PullRequest
2 голосов
/ 11 июня 2019

Мне нужно создать файл журнала или записать в таблицу журнала для хранимой процедуры PL / SQL.Если я правильно понимаю, я не могу использовать спул в хранимой процедуре.Я знаю, что могу записать в файл журнала с помощью UTL_FILE, но я пытаюсь выяснить, как получить некоторую информацию, которую я хочу записать.При буферизации вы получаете какую-то строку результата после выполнения каждого оператора, например «PL / SQL-процедура успешно завершена» или «5 выбранных строк».Есть ли способ получить этот вывод или что-то подобное, чтобы я мог поместить их в свои журналы?

1 Ответ

6 голосов
/ 11 июня 2019

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

«Процедура PL / SQL успешно завершена» может быть сгенерирована путем помещения вашего вызова процедуры в блок BEGIN..END с обработчиком исключений. Если обработчик исключений не вызывается, выведите Successfully completed. Если он вызывается, используйте WHEN OTHERS, чтобы вывести любую отладочную информацию, которую вы хотите.

BEGIN
  INVOKE_YOUR_PROCEDURE_HERE;
  UTL_FILE.PUT_LINE(fileHandle, 'PL/SQL procedure successfully completed');
EXCEPTION
  WHEN OTHERS THEN
    UTL_FILE.PUT_LINE(fileHandle, 'Procedure failed: ' || SQLCODE || ' - ' || SQLERRM);
END;

«5 выбранных строк» ​​можно сделать, распечатав SQL% ROWCOUNT после выполнения оператора SELECT, как в

UTL_FILE.PUT_LINE(fileHandle, SQL%ROWCOUNT || ' rows affected');

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...