2014-09-08 3 views
1

저는 PL/SQL에 익숙하지 않아 알아낼 수없는 예외를 표시하는 데 문제가 있습니다.PL/SQL 예외 처리 및 업데이트 문

두 개의 저장 프로 시저와 익명 블록을 사용하여 호출하고 있습니다. 나는이 방식으로 몇 가지 다른 절차를 만들었고 모두 잘 작동합니다.

이것은 내 테이블을 업데이트하는 첫 번째 절차입니다.

위의 절차를 호출하는 절차입니다. 이것은 내가 할 일을 표시하고 그것이 효과가 있음을 확인하는 것입니다.

create or replace procedure UPD_CUST_SALESYTD_VIASQLDEV (pcustid number, pamt number) AS 
begin 
dbms_output.put_line('--------------------------------------------'); 
dbms_output.put_line('Updating SalesYTD. Customer Id: ' || pcustid || ' Amount: ' || pamt); 
UPD_CUST_SALESYTD_IN_DB(pcustid, pamt); 
commit; 
dbms_output.put_line('Udpate OK'); 
exception 
when others then 
    RAISE_APPLICATION_ERROR(-20000, SQLERRM); 
end; 

위의 절차를 호출하기 위해 사용하는 익명 블록입니다. 위의 절차를 호출합니다.

set serveroutput on; 
begin 
UPD_CUST_SALESYTD_VIASQLDEV(3,999.9); 
end; 

오류가 발생하지 않는 매개 변수를 전달하면 모든 코드가 정상적으로 작동합니다.

예를 들어, 입력하면;

set serveroutput on; 
begin 
upd_cust_salesytd_viasqldev(3,400); 
end; 

올바른 출력을 얻었으며 테이블에서 변경되었습니다. 그러나

-------------------------------------------- 
Updating SalesYTD. Customer Id: 3 Amount: 400 
Udpate OK 

, 나는 오류가 발생 할 매개 변수를 전달하면 어느 고객 ID가 존재하지 않거나 양이 범위를 벗어나있는 아무 일도 발생하지 않습니다. 나는 이것을 얻습니다 :

-------------------------------------------- 
Updating SalesYTD. Customer Id: 3 Amount: 1000 

그 밖의 것은 없습니다.

비슷한 절차에서 예외가 있습니다. 이 예제는 테이블에 삽입하는 프로 시저를 사용합니다.

-------------------------------------------- 
Adding Customer. ID: 500 Name: Helen Nolan 
ORA-20002: Customer ID out of range 

이 절차에서 예외가 전혀 반환되지 않는 이유는 확실하지 않습니다. 작동하는 다른 프로 시저에서 예외가 발생하면 Oracle SQL Developer의 스크립트 출력에 내 예외가 표시됩니다.

하지만, 내 업데이트 절차에 뭔가가 DBMS 출력 라인 위의 예외, 스크립트 출력 인쇄이 오류 보고서를 인상해야하는 경우

Error report - 
ORA-20000: ORA-20032: Amount out of range 
ORA-06512: at "S4931645.UPD_CUST_SALESYTD_VIASQLDEV", line 10 
ORA-06512: at line 2 
20000. 00000 - "%s" 
*Cause: The stored procedure 'raise_application_error' 
      was called which causes this error to be generated. 
*Action: Correct the problem as described in the error message or contact 
      the application administrator or DBA for more information. 

그래서, 내 예외가 발생 된 것으로이 인정하는 것하지만, 표시되지 않습니다.

어떤 도움을 주셔서 감사합니다. 전 완전히 혼란 스럽습니다. 나는 정말로 분명한 실수를하고 있는가?

+0

죄송합니다, 이곳에서만 혼란 스러울 것입니다. 문제는 발생하지 않았거나 표시되지 않는 예외입니까? –

+0

'Exception' 문에서'dbms_output.put_line'을 사용해 보셨습니까? 예 :'DBMS_OUTPUT.'RAISE_APPLICATION_ERROR' 전의 PUT_LINE (​​'Lorem Ipsum Error Stuff') – jinksPadlock

+0

예외가 표시되지 않습니다 @MaheswaranRavisankar –

답변

0

전문가의 의견을 듣지 않아도됩니다. 응답을 얻는 것처럼 들리지만 사용자 정의 오류 문을 작성하면됩니다. 범위를 벗어난 것은 매개 변수가 설정된 목록에서 해당 쿼리의 범위 내에 존재하지 않는다는 것을 의미합니다. 예를 들어 list가 0-100이면 응답은 0-10이고 0은 해당 범위에서 찾을 수 없습니다.