sourcetip

PL/SQL 예외 처리: 아무것도 하지 않음(예외 무시)

fileupload 2023. 3. 4. 15:06
반응형

PL/SQL 예외 처리: 아무것도 하지 않음(예외 무시)

이것은 제가 자주 듣는 질문입니다.stackoverflow에서 정확한 중복을 찾을 수 없었기 때문에 참고용으로 올리려고 합니다.

질문:.PL/SQL에서는 예외를 포착하고, 예외가 포착되었을 때 코드를 실행하는 방법 및 이를 호출 블록에 전파하는 방법을 알고 있습니다.예를 들어 다음 절차에서 NO_DA는TA_FOUND 예외는 직접 처리되지만 다른 예외는 모두 발신자 블록에 대해 발생합니다.

CREATE OR REPLACE PROCEDURE MY_PROCEDURE() 
IS
BEGIN
    do_stuff();

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        -- Do something
        handle_exception();

    WHEN OTHERS THEN
        -- Propagate exception
        RAISE;
END;

그러나 발생한 예외 중 하나 또는 모두를 무시하고 실행 제어를 호출 블록으로 되돌리려면 어떤 명령을 사용해야 합니까?

99%는 예외를 어딘가에 기록하지 않고 묵묵히 무시하는 것이 나쁜 관행이라는 데 동의하지만, 이것이 완벽하게 허용되는 특정 상황이 있습니다.

이 경우 NULL은 친구가 됩니다.

[...]
EXCEPTION

    WHEN OTHERS THEN
        NULL;
END;

예외를 무시하는 것이 바람직할 수 있는 일반적인 상황은 다음과 같습니다.

1) 코드에는 가끔 실패할 수 있는 문장이 포함되어 있으며, 이 사실이 프로그램 흐름을 방해하지 않기를 바랍니다.이 경우 다음 예시와 같이 문을 네스트된 블록으로 묶어야 합니다.

CREATE OR REPLACE PROCEDURE MY_PROCEDURE() 
IS
    l_empoyee_name  EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
    -- Catch potential NO_DATA_FOUND exception and continue
    BEGIN 
        SELECT EMPLOYEE_NAME
        INTO l_empoyee_name
        FROM EMPLOYEES
        WHERE EMPLOYEE_ID = 12345;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
        WHEN OTHERS THEN
            RAISE;
    END;

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Propagate exception
        RAISE;
END;

일반적으로 PL/SQL은 Visual Basic에서 알려진 오류 재개 다음 유형의 예외 처리를 허용하지 않습니다. 여기서 모든 예외가 무시되고 아무 일도 일어나지 않은 것처럼 프로그램이 계속 실행됩니다(PL/SQL oracle에서 오류 처리의 다음 유형 재개 참조).내포된 블록에 실패 가능성이 있는 문을 명시적으로 묶어야 합니다.

2) 절차가 너무 중요하지 않기 때문에 모든 예외를 무시해도 메인 프로그램 로직에는 영향을 주지 않습니다.(단, 이는 매우 드문 경우이며 장기적으로는 디버깅의 악몽이 될 수 있습니다.)

BEGIN

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Ignore all exceptions and return control to calling block
        NULL;
END;

예외를 사일런트하게 무시하는 것이 타당할 경우 다음 시나리오가 있습니다.오브젝트가 존재하지 않고 해당 오브젝트에 대한 작성 또는 치환 구문이 없는 경우 오브젝트를 작성해야 하는 스크립트를 호출하는 경우.PLSQL 개체에는 생성 또는 바꾸기 구문이 있지만 테이블 및 인덱스에는 없습니다.그런 다음 이러한 스크립트를 블록에 넣고 발생한 예외를 무시할 수 있습니다.

언급URL : https://stackoverflow.com/questions/27566867/pl-sql-exception-handling-do-nothing-ignore-exception

반응형