Re: sqlplus return status (Was: checking sqldba return status)
Date: 28 May 92 03:30:38 GMT
Message-ID: <50783_at_seismo.CSS.GOV>
In <11132_at_inews.intel.com> kortikar_at_mipos2.intel.com (Aniruddha Kortikar):
> Oracle does not seem to like the idea of anything other than success!
> As if this is alone is not sufficient sqlplus does not even give the error
> message on stderr. Everything comes on stdout.
>
> for example on my UNIX machine following will also return 0 !
>
> echo "selt * from dual" | sqlplus -s scott/tiger >/dev/null
> echo $? will return 0
> and nothing is displayed on tty
Ignoring the missing 'whenever' syntax from your example, I'm guessing that syntax errors don't exit with failure:
$ sqlplus scott/tiger <<ENDIT > /dev/null
> whenever sqlerror exit failure
> selt * from dual;
> exit success
> ENDIT
$ echo $?
0
If the statement passes the syntax check but fails to execute, it will return a success 0 or failure 1 (scott doesn't have dba privileges so the following fails with ORA-942):
$ sqlplus scott/tiger <<ENDIT > /dev/null
> whenever sqlerror exit failure
> select * from dba_users;
> exit success
> ENDIT
$ echo $?
1
The moral is to debug syntax before installing scripts.
As for stderr vs. stdout, for a while some Oracle frontends (such as exp) output a mixture of stderr and stdout. I make it a habit to output both to a log just in case:
( sqlplus -s userid/password _at_sql_script ) >> log_file 2>&1
if test $? -ne 0
then
... handle the error ...
fi
+-----------------------------------------------------------------------+
| Jean Anderson, DBA email: jean_at_seismo.css.gov |
| SAIC Open Systems Division, MS A2-F or: jean_at_esosun.css.gov |
| 10210 Campus Point Drive phone: (619)458-2727 |
| San Diego, CA 92121 fax: (619)458-4993 |
+-----------------------------------------------------------------------+
Received on Thu May 28 1992 - 05:30:38 CEST
