Вам нужно будет проанализировать их из вывода. Коды ошибок Unix находятся в диапазоне от 0 до 255, и там спрятаны всевозможные маски и сигналы. Таким образом, вы не можете записывать номера ошибок оракула в кодах ошибок Unix.
Таким образом, вам нужно включить в свои сценарии sql оператор show errors
. Но вы НЕ хотите, чтобы там был оператор WHENEVER
, потому что это приведет к ошибке до того, как ошибки будут напечатаны. например bad.sql будет
create or replace
PACKAGE TESTING
IS
function boo (co_id number) return varchar2;
END;
/
show errors
create or replace
PACKAGE BODY TESTING
is
end;
/
show errors
Тогда ваш скрипт должен выглядеть примерно так:
ERR_OUT="$( sqlplus rdbds/rdbds@XE < bad.sql | egrep '^(ORA|PLS)-' )"
if [ -n "$ERR_OUT" ]
then
echo "Errors in SQL:"
echo "$ERR_OUT"
else
echo boo
fi