从korn shell脚本中的Sybase存储过程捕获返回码

时间:2014-02-18 08:05:08

标签: shell stored-procedures sybase isql

我在捕获存储过程的返回代码时遇到了问题。 我正在使用isql语句在我的korn shell脚本中调用sybase存储过程,如下所述。

isql -U ${APPLID} -S{SERVER}> ${sqlMsg} << EOF
use ${DATABASE}
go
exec stored_procedure
go
EOF

returncode=$?

如果存储过程中发生错误,我无法捕获是否遵循以下方法。

if [ $returncode -ne 0 ]
then
 print "failed"
fi

我尝试在存储过程中使用return语句 return (1)

但这并没有给我预期的结果。当我回显返回码时,即使将状态返回为1,它也会回显为0。 在sql日志中看到返回状态为1。

2 个答案:

答案 0 :(得分:1)

要捕获sql语句中的错误,您需要查看@@error

returncode=`isql -U ${APPLID} -S{SERVER}> ${sqlMsg} << EOF
             use ${DATABASE}
             go
             exec stored_procedure
             go
             select @@error
             go 
 EOF`

这应该允许你的if条件按预期工作。

答案 1 :(得分:0)

$!变量返回isql程序的执行状态,而不是存储过程状态。 这就是回显的返回代码打印0的原因:isql程序本身工作正常。

要捕获商店过程的输出,我会将其重定向到外部输出文件并读取它。 isql实用程序有几个用于使用输入/输出文件进行操作的选项, 例如-i input_file和-o output_file,用于相应地指定输入和输出文件。如果您的存储过程有输出,它将被发送到output_file。 现在,您可以通过简单的“cat”或更复杂的循环从脚本中读取output_file内容,具体取决于output_file内容。要创建具有唯一名称的输出文件,请使用$$变量,该变量为您提供脚本的当前PID。最后删除输出文件。

#!/bin/bash
output_file=output.$$
isql with all your prameters and -o $output_file
status=`cat $output_file`
echo $status
rm $output_file