=====Error Handling von SQL*Plus Aufrufen in Bash Skripten=====
Mit den beiden SQL*Plus Anweisungen kann ein Fehlercode zurück geben werden:
* WHENEVER SQLERROR EXIT SQL.SQLCODE
* WHENEVER OSERROR EXIT 9
==== Einfacher Fall - direkter Aufruf von SQL*Plus ====
SQLPlus wird direkt aufgerufen:
...
DBVIEW=global_name
${ORACLE_HOME}/bin/sqlplus -s / as sysdba << EOScipt
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT 9
set pagesize 0
set heading off
set feedback off
select global_name from ${DBVIEW};
exit;
EOScipt
if [[ "$?" != "0" ]]; then
DB_STATUS=DOWN
fi
...
Mit "WHENEVER OSERROR EXIT SQL.SQLCODE" kann ein Code != 0 zurückgeben werden, aber da der SQL Errorcode eine negative Zahl ist, kann es passieren das nicht die erwartete Zahl auch wirklich im Rückgabe Ergebnis steht!
----
==== Aufruf von SQL*Plus über `` über eine Subshell====
Um das Ergebniss eines SQL*Plus Aufrufes zu verwenden kann das so aufgerufen werden:
...
# check for plugable dB
DBVIEW=\$database
PLUG_DB=`${ORACLE_HOME}/bin/sqlplus -s / as sysdba << EOScipt
WHENEVER OSERROR EXIT 9
WHENEVER SQLERROR EXIT 9
set pagesize 0
set heading off
set feedback off
select cdb from v_${DBVIEW};
exit;
EOScipt`
DB_ERROR=$?
if [[ "${DB_ERROR}" -ne "0" ]]; then
PLUG_DB=DOWN
fi
..
D.h. am besten Return Code von SQL*Plus gleich nach dem Aufruf in eine Variable zu schreiben, mit dieser Arbeiten, schnell ist **$?** von einem folgende Call überschrieben, ohne das der Fehler sofort ins Auge fällt.
----
====Quellen ====
Doku:
* https://docs.oracle.com/en/database/oracle/oracle-database/19/sqpug/WHENEVER-SQLERROR.html