Returning Error Codes from SQL Script Jobs
The SQL Script job internally uses SQL*Plus to run a user's SQL or PL/SQL script. If SQL*Plus returns 0, the job returns a status of Succeeded. If it returns any other value, it returns a job status of Failed. By default, if a SQL script runs and encounters an error, it may still result in a job status of Succeeded, because SQL*Plus still returned a value of 0. To make such jobs return a Failed status, you can use SQL*Plus EXIT to return a non-zero value.
The following examples show how you can return values from your PL/SQL or SQL scripts. These, in turn, will be used as the return value of SQL*Plus, thereby providing a way to return the appropriate job status (Succeeded or Failed). Refer to the SQL*Plus User's Guide and Reference for more information about returning EXIT codes.
Example 1
WHENEVER SQLERROR EXIT SQL.SQLCODE select column_does_not_exist from dual;
Example 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;
Example 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;