SQLスクリプト・ジョブからのエラー・コードの戻り

SQLスクリプト・ジョブは、内部的にSQL*Plusを使用して、ユーザーのSQLまたはPL/SQLスクリプトを実行します。SQL*Plusが0を返す場合、ジョブは「成功」のステータスを返します。その他の値を返す場合は、「失敗」のジョブ・ステータスを返します。デフォルトでは、SQLスクリプトを実行し、エラーが発生している場合でも、SQL*Plusが値0を返すために、ジョブ・ステータスが「成功」になることがあります。このようなジョブで「失敗」ステータスを返すには、SQL*PlusのEXITを使用してゼロ以外の値を返します。

次の例は、PL/SQLまたはSQLスクリプトから値を返す方法を示しています。これらは、SQL*Plusの戻り値として順番に使用されるため、適切なジョブ・ステータス(「成功」または「失敗」)を返す方法が示されます。EXITコードを返す場合の詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

例1

WHENEVER SQLERROR EXIT SQL.SQLCODE
select column_does_not_exist from dual;

例2

-- SQL*Plus will NOT return an error for the next SELECT statement
SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
 
WHENEVER SQLERROR EXIT SQL.SQLCODE;
BEGIN
  -- SQL*Plus will return an error at this point
  SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
END;
/
WHENEVER SQLERROR CONTINUE;

例3

variable exit_code number;
 
BEGIN
 DECLARE
 local_empno number(5);
 BEGIN
  -- do some work which will raise exception: no_data_found
  SELECT 123 INTO local_empno FROM sys.dual WHERE 1=2;
 EXCEPTION
  WHEN no_data_found THEN
    :exit_code := 10;
  WHEN others THEN
    :exit_code := 2;
  END;
 END;
/
exit :exit_code;