sql >> Databasteknik >  >> RDS >> Oracle

NÄR SQLERROR aldrig fungerar

Tänk på nedanstående generiska kodavsnitt:

$ cmd1 < <(cmd2) # Or cmd1 <(cmd2)
$ echo $?

Här, $? är inställd på utgångsstatus för cmd1 . Utgångsstatus för cmd2 är förlorad.

I ditt fall, sqlplus råkar vara cmd2. Så, utgångsstatusen för det kommandot fångas inte i $? .

Du kan prova detta;

$ sqlplus ... | cmd1
$ status=(${PIPESTATUS[@]})
$ for i in ${status[@]}; do
>     [ $i -ne 0 ] && echo Exited with $i
> done
$ echo Exited with 0

Observera att om cmd1 är en komplex struktur (som while read t.ex.) allt du kör i att medan loop kommer att köras i ett subshell och alla miljöer (variabler/pwd) som ändras kommer att gå förlorade.




  1. Tillåt användare att bara komma åt vissa tabeller i min innehållsleverantör

  2. mysql-syntax på inte lika många värden

  3. Använder HHVM med WordPress

  4. Video:Oracle 12c IDENTITY Column Performance på RAC