以下は私のコードです。パッケージ仕様をコンパイルし(.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のコメントに基づいて編集されました。