아래는 내 코드입니다. 패키지 사양을 컴파일하고(.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 ]
0이 아닌 값을 반환하면 종료되어야 합니다. sqlplus
게시한 스크립트는 를 반환하는 if [ $? -ne 0 ]
명령 뒤에 옵니다 .echo
0
구문 분석 때문에 ls
명령의 명령 도 변경했습니다 .find
ls
ilkkachu의 의견을 바탕으로 편집되었습니다.