2012-04-16 2 views
1
...PROCEDURE... 
..... 
WHEN DUP_VAL_ON_INDEX THEN 
DBMS_OUTPUT.PUT_LINE(SQLCODE || ' ' || SQLERRM); 
RAISE_APPLICATION_ERROR(-20021, 'Attempted to add duplicate primary key into table A2PROD'); 
..... 

결과 : 나는 RAISE_APPLICATION_ERROR 기능 후 DOPL을 넣어 시도하지만 여전히 작동하지raise_application_error()에서 정보를 얻는 방법은 무엇입니까?

-20021 ORA-20021 Attempted to add duplicate primary key into table A2PROD 

:

-1 ORA-00001: unique constraint (SYSTEM.SYS_C004235) violated 

나는 같은 결과를 보여주고 싶어요. 응용 프로그램 오류를 발생시키고 오류 메시지와 코드를 가져 와서 Oracle 개발자의 출력 콘솔로 인쇄하려고합니다.

답변

0

게시 된 프로 시저가 다른 프로 시저에서 호출 되었습니까? 아니면 다른 방법으로 실행하고 있습니까?

RAISE_APPLICATION_ERROR는 예외 번호와 해당 메시지를 호출 프로그램에 전달합니다. 그럼 과 예외가 있습니까? 예를 들어,이 같은 가난한 예외 핸들러가있는 경우 ...

 your_proc_here(p_new_id=>1); 
exception 
    when others then 
     null; 
end; 

... 당신은 -20021 오류, 바로 DBMS_OUTPUT 출력을 볼 수 없을 것입니다.

2

나는이 문제를 충분히 이해하지 못한다. DOPLdbms_output.put_line의 약어이고 SQLCODE이 -20021이고 SQLERRM이 "ORA-20021 : 테이블 A2PROD에 중복 기본 키를 추가하려고 시도했습니다."라고하려면 dbms_output.put_line 호출을 catch하는 예외 처리기에 넣어야합니다 사용자 정의 오류 메시지 물론 당신은 다음과 같이 할 수도 있습니다

WHEN dup_val_on_index 
THEN 
    l_err_code := -20021; 
    l_err_msg := 'Attempted to add duplicate primary key into table A2PROD'; 
    dbms_output.put_line(l_err_code || ' ' || l_err_msg); 
    raise_application_error(l_err_code, l_err_msg); 
END; 
관련 문제