2010-02-12 5 views
2

오류 코드를 나타내는 OUT 매개 변수가있는 저장 프로 시저가 있습니다. 오류 코드가 0이 아닌 경우에, 나는 오류 지금까지SQL * Plus : 강제로 오류 코드를 반환합니다.

DECLARE 
BEGIN 
foo (err_code); 

IF (err_code <> 0) THEN 
    raise_application_error(...); 

END; 

너무 좋은에게 인상,하지만 여기 내 질문입니다.

이 코드 조각 (위 그림 참조)은 sqlplus에 의해 실행됩니다. sqlplus는 쉘 스크립트에서 호출되며 0/0이 아닌 sql 스크립트로 종료해야합니다.

#shell script 

sqlplus ... @myscript 
return $? 

raise_application_error가 실행되면 제어는 sqlplus로 돌아갑니다.

sql> 

내가 원했던 것은 sqlplus가 0을 $로 반환하지 않고 쉘로 다시 나가는 방법입니까?

의견이 있으십니까? 미리 감사드립니다.

답변

7
+0

감사합니다. – Tom

+0

우리는'sqlerror exit sql.sqlcode' 명령을 실행합니다.이 명령은 조금 더 많은 정보를 스크립트의 호출자에게 돌려줍니다. SQLPlus가 일종의 OS 레벨 오류로 넘어가는 경우에 대비하여'oserror exit 1 '을 수행합니다. –

0

당신이 당신의 PL/SQL 제기하는 응용 프로그램 오류 관심이 있다면, 당신은 SQL의 * 플러스 변수로 리턴 코드를 선언하고 반환 할 수는 PL/SQL 프로 시저로 설정해야합니다.

#shell script 

sqlplus /nolog << EOF 
connect uid/pw 
variable retval number; 
BEGIN 
    foo (:retval); 
END; 
/

exit retval; 
EOF 

return $? 
관련 문제