PL/SQL 프로그램이 실패하면 쉘 스크립트에 오류가 발생합니다.

PL/SQL 프로그램이 실패하면 쉘 스크립트에 오류가 발생합니다.

쉘 스크립트에서는 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 블록에 오류가 발생하면 오라클에서 호스트 동시 프로그램으로 실행 중인 쉘 스크립트를 잘못 출력해야 하는데 그렇게 되지 않습니다.

답변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 등).

관련 정보