2011-08-09 3 views

답변

5
DECLARE 
    pe_ratio NUMBER(3,1); 
BEGIN 
    SELECT price/earnings INTO pe_ratio FROM stocks 
     WHERE symbol = 'XYZ'; -- might cause division-by-zero error 
    INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio); 
    COMMIT; 
EXCEPTION -- exception handlers begin 
    WHEN ZERO_DIVIDE THEN -- handles 'division by zero' error 
     INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL); 
     COMMIT; 
    RAISE ; --This will reraise your exception 
END; -- exception handlers and block end here 

나는 당신의 질문을 이해하면 제대로, 당신은 단지 예외를 re-raise해야합니다. (예외 블록의 상기 참조; here으로부터 실시 예에 기초하여) 위의 링크


EDIT


: http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm#1069

선택적 OTHERS 예외 핸들러, 어떤 블록 또는 서브 프로그램에서 항상 핸들러이며 exc의 핸들러 역할을합니다. eptions은 특별히 지정되지 않았습니다. 따라서 블록 또는 서브 프로그램은 하나의 OTHERS 핸들러 만 가질 수 있습니다 ( ).

EXCEPTION 
    WHEN ZERO_DIVIDE THEN 
     -- handle the error 
    WHEN NO_DATA_FOUND THEN 
     -- handle the error 
    WHEN OTHERS THEN 
     -- handle all other errors 
END; 

WHEN OTHERS 
NULL ; --swallowing the exception, not propagating it, just ignoring it. This will be problematic! 
END ; 

그러나 당신을 ... 예를 들어 당신이 오류를 삼킬 아무것도

을하지 않는다하기 위해 언제 기타를 사용하지 않아야합니다, 기타를 사용하는주의 사항이 있습니다 이를 수행 할 수 있습니다 :

WHEN OTHERS 
    LOGException(...) ; /** look at the asktom link for his example **/ 
    RAISE; --always follow up with a RAISE! 
END ; 

Have a look at asktom to see his views WHEN OTHERS!

그러나 예외를 호출하는 앱에 전달하려는 경우 캡쳐 할 필요가 없습니다. 그것을 포착하지 않으면 자동으로 거품이 날 것입니다.

+0

특정 예외 대신 모두 캡처하는 방법은 무엇입니까? – Malfist

+0

모든 예외를 포착하기 위해 편집했습니다. – Malfist

+0

@Malfist, 'catch all'은 다른 것입니다 (위에 편집 한 것입니다) – Harrison

관련 문제