roy*_*g86 14 oracle shell aix sqlplus
#!/bin/sh
echo "Please enter evaluate database username"
read eval_user
echo "Please enter evaluate database password"
read eval_pass
echo "Please enter the database name"
read db_name
LOGFILE=shell_log.txt
$ORACLE_HOME/bin/sqlplus -s /nolog <<-EOF>> ${LOGFILE}
connect $eval_user/$eval_pass@$db_name
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
DBMS_OUTPUT.put_line('Connected to db');
EOF
if [ $? != 0 ]
then
echo "The upgrade script failed. Please refer to the log results.txt for more information"
echo "Error code $?"
exit 0;
fi
Run Code Online (Sandbox Code Playgroud)
我正在输入垃圾值,试图强制此脚本失败.但是,令人讨厌的是,它一直在前进,没有提到任何错误代码.还有什么需要做的吗?
小智 13
Max说的是正确的.试试这个修改过的脚本
#!/bin/sh
echo "Please enter evaluate database username"
read eval_user
echo "Please enter evaluate database password"
read eval_pass
echo "Please enter the database name"
read db_name
LOGFILE=shell_log.txt
sqlplus -s /nolog <<-EOF>> ${LOGFILE}
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
connect $eval_user/$eval_pass@$db_name
DBMS_OUTPUT.put_line('Connected to db');
EOF
sql_return_code=$?
if [ $sql_return_code != 0 ]
then
echo "The upgrade script failed. Please refer to the log results.txt for more information"
echo "Error code $sql_return_code"
exit 0;
fi
Run Code Online (Sandbox Code Playgroud)
请注意使用sql_return_code捕获SQLPLUS返回码.
DBMS_OUTPUT语句应该失败并显示错误 - "SP2-0734:未知命令开始...".您可以在日志文件中找到错误消息.
可以使用错误日志记录工具捕获SQLPLUS 11g中的sp2错误.有关更多信息,请查看http://tkyte.blogspot.co.uk/2010/04/new-thing-about-sqlplus.html.
在建立与db的连接之后执行when语句可能是可能的(因为之后你已经提到过它们).请尝试以下代码: -
$ORACLE_HOME/bin/sqlplus -s /nolog <<-EOF>> ${LOGFILE}
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
connect $eval_user/$eval_pass@$db_name
DBMS_OUTPUT.put_line('Connected to db');
EOF
Run Code Online (Sandbox Code Playgroud)
阿治的回答
WHENEVER SQLERROR EXIT SQL.SQLCODE;
Run Code Online (Sandbox Code Playgroud)
然后使用
sql_return_code=$?
Run Code Online (Sandbox Code Playgroud)
是不正确的(或者在大多数情况下是不正确的)。请参阅下面的详细信息。
UNIX OS中的Shell脚本最多可以返回255个代码。例如“不支持此字符集转换的ORA-12703”返回代码应为12703,但它不适合UNIX 8位返回代码。
实际上,我只是做了一个测试,然后运行了一个错误的SQL,但失败了,并显示“ ORA-00936:缺少表达式”-sqlplus
返回168(!)。
因此,实际的返回码936被包装在256处,仅剩余部分被返回。936%256 = 168。
在Windows上,这可能可以工作(未经测试),但在UNIX上(如上所述进行测试)则不能。
唯一可靠的机制可能是将结果假脱机到日志文件中,然后执行类似的操作
tail -n 25 spool.log | egrep "ORA-" | tail -n 1 | cut -d: -f1 | cut -d- -f2
Run Code Online (Sandbox Code Playgroud)
因此,它将grep后台打印日志文件,然后剪切实际的最新ORA代码。
| 归档时间: |
|
| 查看次数: |
71230 次 |
| 最近记录: |