=====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