![PL/SQL 프로그램이 실패하면 쉘 스크립트에 오류가 발생합니다.](https://linux55.com/image/50765/PL%2FSQL%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%B4%20%EC%8B%A4%ED%8C%A8%ED%95%98%EB%A9%B4%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
쉘 스크립트에서는 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 등).