Вы должны добавить эти предложения в свои сценарии sqlplus, чтобы контролировать, была ли ошибка sql или ошибка ОС.
whenever sqlerror exit failure;
whenever oserror exit failure;
Затем вы должны контролировать этот код возврата в своей программе, чтобы проверьте, нормально ли выполнен сценарий. Если вы этого не сделаете, sqlplus всегда завершает работу с 0, несмотря ни на что.
Пример
$ cat test.sql
set echo on
drop table tx purge;
exit;
$ sqlplus / as sysdba @test.sql
SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 5 12:11:31 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> drop table tx purge;
drop table tx purge
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> exit;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
$ echo $?
0
С включенными правыми предложениями
$ cat test.sql
whenever sqlerror exit failure;
whenever oserror exit failure;
set echo on
drop table tx purge;
exit;
$ sqlplus / as sysdba @test.sql
SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 5 12:13:26 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> drop table tx purge;
drop table tx purge
*
ERROR at line 1:
ORA-00942: table or view does not exist
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
$ echo $?
1
По умолчанию, как показано , sqlplus всегда будет завершать работу с 0. Вам необходимо указать ему, что он будет выходить с ошибкой, когда произойдет ошибка.
всякий раз, когда sqlerror