저는 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.
그래서, 내 예외가 발생 된 것으로이 인정하는 것하지만, 표시되지 않습니다.
어떤 도움을 주셔서 감사합니다. 전 완전히 혼란 스럽습니다. 나는 정말로 분명한 실수를하고 있는가?
죄송합니다, 이곳에서만 혼란 스러울 것입니다. 문제는 발생하지 않았거나 표시되지 않는 예외입니까? –
'Exception' 문에서'dbms_output.put_line'을 사용해 보셨습니까? 예 :'DBMS_OUTPUT.'RAISE_APPLICATION_ERROR' 전의 PUT_LINE ('Lorem Ipsum Error Stuff') – jinksPadlock
예외가 표시되지 않습니다 @MaheswaranRavisankar –