이 기사는 Oracle 사이트에서 발견되었습니다 : Managing Exceptional Behavior, Part 1.이 Oracle 코드는 무엇을하고 있습니까?
누군가가 오류 패키지를 생성, 처리,보고 및 이동,보고 및 중지 및 기록하는 절차를 정의했습니다. 이 패키지의 내역은 errpkg입니다.
내가 관심이있는 부분
은 여기에 있습니다 : 그것은 문서에 나타나는 정확히에 붙여 넣기 된 스 니펫을IF l_errcode BETWEEN -20999 AND -20000 THEN
raise_application_error (l_errcode, l_errmsg);
/* Use positive error numbers -- lots to choose from! */
ELSIF l_errcode > 0 AND l_errcode NOT IN (1, 100) THEN
raise_application_error (-20000, l_errcode || '-' || l_errmsg);
/* Can't EXCEPTION_INIT -1403 */
ELSIF l_errcode IN (100, -1403) THEN
RAISE NO_DATA_FOUND;
/* Re-raise any other exception. */
ELSIF l_errcode != 0 THEN
EXECUTE IMMEDIATE
'DECLARE myexc EXCEPTION; ' ||
' PRAGMA EXCEPTION_INIT (myexc, ' || TO_CHAR (err_in) || ');' ||
'BEGIN RAISE myexc; END;';
END IF;
. I 은 첫 번째 if
문이 모든 사용자 오류를 다루고 있다고 믿습니다. -209999에서 -20000은 사용자가 만든 예외 용으로 예약되어 있습니다. 첫 번째 elsif
문에서
나는 또한 애플리케이션 -에 대한 긍정적 인 숫자를 처리 특정 오류 숫자. 긍정적 인 오류 메시지 번호를 처리하면 은 -20,999와 -20,000 사이의 오류 번호로 제한되고 일부는 오라클이 사용하는 (비록 내가 1과 100에서 멀리 떨어져 있지만 오라클이 사용하는 두 가지 긍정적 인 오류 번호). 그는 등 (150)과 같은 자신의 코드, (160), (170)의 오류를 선언 행복처럼
그래서 그다지 소리, 그들은 그러나
1 ~ 100, 다음 무엇 발생하지 않는 한 프로 시저의 두 부분은 뭐하는거야? (100, -1403)의 errcode는 무엇입니까? 오류 코드 01403 (데이터 없음)과 관련이 있음을 알 수 있지만 대괄호 (100, -1403)의 위치는 이해할 수 없습니다. 그리고 즉각적인 실행을위한 최종 elsif는 무엇입니까? 나는 그 목적이 무엇인지 알기 위해 고심하고있다.
마지막으로 else를 모두 남겨 두시겠습니까? –
@AndrewMartin - 음, 아니요,이 패키지/프로 시저가 '다른 사람이 잡을 때'잡아 당기면 필요합니다. 그렇지 않으면 많은 오류가 발생합니다. 나는 왜 다른 사람들이 언제 간접적으로 잡힌 오류를 재현하지만, 그 과정에서 정보를 잃어 버리는 지에 대해 질문하고 있다고 생각합니다. 어쩌면 그것은 포괄적 인 또는 오류가없는 것으로 의도되었지만 전체적인 접근 방식은 저에게 이상한 것처럼 보입니다. –