web-dev-qa-db-ja.com

sqlplusスクリプトのエラーで停止

@@fileで呼び出されるいくつかのsqlファイルを使用して、pl/sqlコードをデプロイしています。パッケージでコンパイルエラーが発生した場合、スクリプトは最後まで続行されます。

すべてのコンパイルエラーで停止する方法はありますか?

WHENEVER SQLERROR EXIT SQL.SQLCODEを試しましたが、スクリプトは引き続き続行されます。

3
Jan

これはなんらかの回避策なしでは実行できないので、ここに示します。

作成後にPL/SQLを再コンパイルし、再コンパイルに失敗した場合は例外を発生させることができます。これにより、SQL * Plusは失敗時に終了します。

例えば:

test.sql:

create or replace procedure foo
as
begin
  this is an error;
end;
/

exec execute immediate 'alter procedure foo compile'; exception when others then raise_application_error(-20000,'compilation error')

例:

[Oracle@node1 ~]$ sqlplus phil/phil

SQL*Plus: Release 11.2.0.2.0 Production on Fri Dec 14 20:45:47 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
SQL> @test.sql

Warning: Procedure created with compilation errors.

BEGIN execute immediate 'alter procedure foo compile'; exception when others then raise_application_error(-20000,'compilation error'); END;

*
ERROR at line 1:
ORA-20000: compilation error
ORA-06512: at line 1


Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[Oracle@node1 ~]$
5
Philᵀᴹ