쉘 스크립트에서 PL/SQL 저장 프로시저를 호출하고 있습니다.
sqlplus -s <<EOF
$v_fcp_login
set head off feed off serverout on size 1000000
exec XXIRIS_TEST_K.XXIRIS_TEST('$v_1',$v_2,$v_3,'$v_4',$v_5);
exit
EOF
그런데 PL/SQL 블록에 오류가 생기면 Oracle에서 호스트 동시 프로그램으로 실행되고 있는 쉘 스크립트에 오류를 내야 하는데 그렇게 하지 않습니다.
답변1
먼저, SQL 오류가 발생할 경우 SQL*Plus에서 오류가 발생하도록 해야 합니다. 다음을 추가하면 됩니다.
WHENEVER SQLERROR EXIT FAILURE
SQL 스크립트에 (아마도 위쪽에). 단어 대신에 다른 코드(음이 아닌 작은 정수, 0이 아닌 = 실패)를 지정할 수도 있습니다 FAILURE
.
이는 의 쉘 스크립트로 다시 돌아옵니다 $?
. 그러면 쉘 스크립트가 이에 반응하도록 할 수 있습니다. 전체적으로 다음과 같습니다.
sqlplus -s <<EOF
$v_fcp_login
set head off feed off serverout on size 1000000
WHENEVER SQLERROR EXIT FAILURE
exec XXIRIS_TEST_K.XXIRIS_TEST('$v_1',$v_2,$v_3,'$v_4',$v_5);
exit
EOF
if [ 0 -ne "$?" ]; then
echo "Stored proc blew up." >&2
exit 1
fi
물론, 서로 다른 종료 코드를 사용하여 서로 다른 내용을 나타낼 수 있습니다(예: 여러 저장 프로시저를 호출하는 경우 첫 번째 종료는 종료 1, 두 번째는 종료 2 등).