나는이 GOTO 접근 방식을 추천 하지입니다 : 다른 사람들이 이미 말했듯이, 예외는 PL/SQL에서 오류를 처리하는 올바른 방법입니다. 그러나 특정 문제를 해결하기 위해, 당신이 할 수 있습니다 :
물론
BEGIN
IF V_SYS_ERROR <> 0 THEN
GOTO SQL_ERROR;
END IF;
GOTO PROC_END;
<<SQL_ERROR>>
V_SYS_ERROR_MSG := SUBSTR(SQLERRM, 1, 252);
DBMS_OUTPUT.PUT_LINE('ERROR IN EXECUTION IN PROCEDURE');
DBMS_OUTPUT.PUT_LINE('THE ERROR CODE IS ' || V_SYS_ERROR || '- ' ||
V_SYS_ERROR_MSG);
<<PROC_END>>
NULL;
END;
, 이것은 아직도 당신이 왜 제대로 어쨌든 그것을 할 것을하고있다, 그래서 만약 코드를 변경 포함? 즉 그런데
DECLARE
SQL_ERROR EXCEPTION;
BEGIN
IF V_SYS_ERROR <> 0 THEN
RAISE SQL_ERROR;
END IF;
EXCEPTION
WHEN SQL_ERROR THEN
V_SYS_ERROR_MSG := SUBSTR(SQLERRM, 1, 252);
DBMS_OUTPUT.PUT_LINE('ERROR IN EXECUTION IN PROCEDURE');
DBMS_OUTPUT.PUT_LINE('THE ERROR CODE IS ' || V_SYS_ERROR || '- ' ||
V_SYS_ERROR_MSG);
RAISE;
END;
, DBMS_OUTPUT.PUT_LINE 프로덕션 어플리케이션 시스템에서 에러 메시지를 출력하기에 적합하지 않다. 개발 중에는 디버깅 용으로 만 사용하십시오.
언급 한대로 우리는 예외가 발생했을 때 예외를 처리해야합니까? 그러나 그것은 우리에게 좋은 선택이 아닙니다. 우리는 많은 SQL 서버 저장 프로 시저를 Oracle로 변환하고 우리가 사용했던 도구 (SQL 개발자)는 goto 문을 작성했습니다. 우리는 각각의 SP에 들어가서 논리가 엉망이되기 시작할 것입니다. – Omnipresent
@Omnipresent : "SQL 개발자"라고 할 때 Oracle SQL Developer 또는 다른 이름의 동일한 도구를 의미합니까? –
Oracle sql Developer – Omnipresent