如何在sqlplus中执行.sql文件时仅记录错误

时间:2019-07-05 10:37:24

标签: oracle sqlplus

如何创建仅在通过sqlplus执行.sql文件时发生异常时创建的.log文件。

WHENEVER SQLERROR EXIT SQL.SQLCODE

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

EXIT;

此脚本通过sqlplus执行,我在命令行中添加了参数,当参数不正确或发生ORA错误时执行该脚本,如何将其登录到此.sql所在的文件中。我不想跟踪所有执行,只是创建一个包含错误ORA的日志文件

2 个答案:

答案 0 :(得分:0)

为避免命令输出,请添加

SET ECHO OFF

要记录消息,

您可以使用spool

spool /path/yourlogfile.log

OR

如果您在Unix环境中运行sqlplus命令行,则可以重定向输出。

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

要防止出现替换消息,请添加

SET VERIFY OFF

答案 1 :(得分:0)

可以在Unix框中创建日志文件,但可以使用utl_file。 对于此代码,应将其写在begin end块中。 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;
/