Как записать только ошибку при выполнении файла .sql в sqlplus - PullRequest
0 голосов
/ 05 июля 2019

Как создать файл .log, который будет создаваться только в том случае, если при выполнении файла .sql через sqlplus возникает исключение.

WHENEVER SQLERROR EXIT SQL.SQLCODE

ALTER PRODUCT IDENTIFIED BY &1;
ALTER CUSTOMER IDENTIFIED BY &1;

EXIT;

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

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Можно создать файл журнала в окне Unix, но используя utl_file.Для этого код должен быть написан в начале и конце блока.Сам SQlPlus не имеет возможности создавать буферный файл на условной основе.

Его можно записать примерно так: -

declare
  filehandle utl_file.file_type;
begin

  execute immediate 'ALTER PRODUCT IDENTIFIED BY &1';
  execute immediate 'ALTER CUSTOMER IDENTIFIED BY &1';

exception

when others 
then

  filehandle := utl_file.fopen('/unixpath/test', 'outputfile.log', 'W');
  utl_file.put_line(filehandle, 'test error '||sqlerrm);
  utl_file.fclose(filehandle);

end;
/
0 голосов
/ 05 июля 2019

Чтобы избежать вывода команды, добавьте

SET ECHO OFF

Для регистрации сообщений,

либо вы можете использовать spool

spool /path/yourlogfile.log

OR

Если вы используете sqlplus командную строку в среде Unix, вы можете перенаправить выходные данные.

sqlplus usr/pwd@db @file.sql >/path/yourlogfile.log

Чтобы предотвратить подстановку сообщения, добавьте

SET VERIFY OFF
...