以下是我的代码,我想编译包规范(另存为 .pks 文件),如果它包含任何错误,脚本应该出现错误。但是,这段代码无法正常工作。我怎样才能做到这一点
spec=`ls *.pks -1|sed -e ''s/\.pks$//''`;
if [ ! -z "$spec" ] ; then
for i in $spec; do
compile_spec()
{
sqlplus -s @user << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
SET LINES 255
SET PAGES 0
SET FEEDBACK OFF
SET ECHO OFF
SET PAGESIZE 0
SET TIMING OFF
SET SERVEROUTPUT ON
SET TERM ON
ALTER PACKAGE $i COMPILE PACKAGE;
EOF
}
done
PKS=`compile_spec`;
echo `$PKS`
if [ $? -ne 0 ]; then
echo "error"
exit 1
fi
fi
答案1
这应该有效:
for i in *.pks;do
i=${i%.pks}
sqlplus -s @user << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
SET LINES 255
SET PAGES 0
SET FEEDBACK OFF
SET ECHO OFF
SET PAGESIZE 0
SET TIMING OFF
SET SERVEROUTPUT ON
SET TERM ON
ALTER PACKAGE $i COMPILE PACKAGE;
EOF
if [ $? -ne 0 ]; then
echo "error"
exit 1
fi
done
我刚刚将sqlplus
命令移出函数,并将其放在后面,因此如果返回非零,if [ $? -ne 0 ]
它应该退出。sqlplus
您发布的脚本if [ $? -ne 0 ]
在命令之后echo
,该命令将返回0
.
我还更改了ls
命令的命令find
,因为解析ls
.
根据 ilkkachu 的评论进行编辑。