2011-09-09 6 views
1

이것은 모범 사례에 대한 질문입니다. 나는 아마도 예외 (NO_DATA_FOUND, DUP_VAL_ON_INDEX, ...)를 올릴 수있는 절차 P1과 P2에서이프로 시저에서 PL/SQL 예외 처리

DECLARE 

    --work variables 

    PROCEDURE p1(in_parameter1, out_parameter1, out_parameter2...) IS 
    BEGIN  
     --do stuff 
     --select (...) into (...) from t1 where (...) 
    END; 

    PROCEDURE p2(in_parameter1, out_parameter1, out_parameter2...) IS 
    BEGIN 
     --do stuff 
     --insert/update tables 
     --do more stuff 
    END;  

BEGIN -- MAIN PROCESS STARTS HERE 

    open c1; 
    fetch c1 into c1RowData; 
    EXIT WHEN c1%NOTFOUND  
    --call procedure1 
    --do stuff 
    --call procedure2 
    --do stuff 
    --do stuff 
    --call procedure1 
    --call procedure2 
END; 
/
EXIT; 

명령문과 같은 PL/SQL 블록을 가지고있다.

이 예외를 처리하는 가장 좋은 방법은 무엇이라고 생각하십니까? 절차 내에서 처리해야합니까, 아니면 TRY-CATCH 블록으로 본체의 모든 절차를 처리해야합니까?

답변

6

개인적으로 나는 그들이 던져 넣은 절차 안에 그들을 붙잡을 것입니다. 즉, 외부에서 처리되는 방식에 대해 훨씬 더 많은 제어 권한이 있음을 의미합니다. 예를 들어 사용자 정의 예외로 다시 던져 넣을 수 있습니다.이 예외는 무엇이 잘못되었는지에 대한 자세한 정보를 제공 할 수 있습니다.

'Failed to find a matching row in table a for value b' 

훨씬 더 설명하는 절차 외부

'no data found' 

보다하지만이에 정말 의존 : 실제 기능을 구현 호출 응용 프로그램

    1. 오류보고 요구 사항 절차 내에서 물건을 가지고있는 곳.

    예를 들어, 프로 시저 1에서 select가 행을 찾지 못했지만 프로 시저 2를 실행하려고한다고 가정하십시오. 프로 시저 1에서 예외를 catch하고 무시해야합니다. 그렇지 않다면 프로 시저 2의 예외 처리기에 던져 질 것입니다.

    또는 선택 1에서 아무 것도 찾지 못한 경우에 프로 시저 1에서 행을 삽입하려고한다고 가정합니다.이 경우 예외를 잡아 예외 처리기에서 삽입을 수행해야합니다. 그 누구도 날에 이동하기 전에 지금

    , 나는 당신이 당신의 코드 내에서 실행의 흐름을 contrlling에 대한 예외 처리기를 사용 추천 아니에요 ..

  • +0

    감사합니다. 당신은 그것이 "구현 된 실제 기능에 달려 있다고 말한다.) "절차에서 예외를 처리하는 것이 가장 적합한 상황은 무엇입니까? – bruno

    1

    예외가 프로 시저 내부에서 처리 될 때 가장 좋습니다. 그 결과는 빠를 것입니다. 다른 함수에서 같은 프로 시저를 재사용하는 경우뿐만 아니라 예외를 처리 할 필요도 없습니다. 내 관점, 예외 자체 내부 처리 할 수있는 최고의 하나입니다.

    +0

    이 어떻게 "그것은 빠른 결과 될 것"설명 할 수 있습니까? – Sathya

    3

    당신이 예는 이론이다, 그러나 희망 당신은 아이디어를 얻을 소스 (예외적으로 프로 시저 내에서)에서 예외를 처리하려고 시도해야합니다. 이렇게하면 문제가 발생한 위치를보고 할 수있는 범위가 넓어지며 일반적으로 불쾌한 Oracle 오류 메시지를 사용자에게 전달하지 않고 정상적으로 문제를 해결할 수있는 가능성이 커집니다.

    물론 StevieG가 일반적으로 더 많은 응용 프로그램과 사용자/다른 PL/SQL에 도움이되는 사용자 정의 예외를 발생시킬 수 있다고 대답 한 경우 오류를 처리하고 다시 발생시킬 수 있습니다. 암호.

    사용자 지정 오류에 ASKTOM 토론 여기가 처리된다 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4684561825338