2014-09-23 1 views
1

내 스토어드 프로 시저가 raise_application_error를 호출하여 throw 할 수있는 오류 코드를 상수로 저장합니다. 내 프로 시저 중 하나는 다른 하나가 throw하는 오류를 잡아야하고, 나는 이것을 pragma exception_init로 수행하려고합니다. 그것은 숫자 리터럴 (명시 적으로 내가 말하는 오류 메시지에서 말하는 것처럼)을 받아들이는 것처럼 보이지만 그렇지 않으면 상수에 저장하는 오류 코드를 하드 와이어 할 수 없으면 좋을 것입니다. 내가 쓴 것처럼 나도 같은를 달성 할 수 있도록이에 대한 몇 가지 해결 방법은 있나요 :프라그 마 상수가있는 init 초기화

프라그 exception_init (myException, pkg_constants.error_not_null);

+0

당신은 얻을 PLS-00103 직접 패키지 변수를 참조하려고하면 ; 및 PLS-00702 (로컬 변수를 사용하는 경우 (패키지 변수 설정), 맞습니까? –

답변

2

pragma에서 패키지 상수 또는 변수를 사용할 수 없습니다. 그러나 적어도은 같은 파일,

create package pkg_constants as 
    MyException exception; 
    error_not_null constant pls_integer := -20001; 
    pragma exception_init(myException, -20001); 
end pkg_constants; 
/

당신은 여전히 ​​오류 번호를 반복해야 :

은 당신이 할 수있는 것은 패키지의 예외 자체와 관련 프라그를 정의합니다. 당신은 다음을 재 선언 할 필요없이 핸들러에서 해당 패키지 정의 예외를 참조 할 수 있습니다 : 예를 들어

exception 
    when pkg_constants.MyException then 
    ... 

:

set serveroutput on 
begin 
    raise_application_error(pkg_constants.error_not_null, 'Threw it'); 
exception 
    when pkg_constants.MyException then 
    dbms_output.put_line('Caught it'); 
    raise; 
end; 
/

Error report - 
ORA-20001: Threw it 
ORA-06512: at line 6 

Caught it