programing

PL/SQL 프로그램 중단

css3 2023. 7. 4. 22:02

PL/SQL 프로그램 중단

PL/SQL 프로그램을 중간에 끝내려면 어떻게 해야 합니까?예외가 발생하면 프로그램을 정상적으로 종료할 수 있는 방법을 찾을 수 없었습니다. 제가 처리하면 다시 코드로 루프됩니다.

기본적으로 제가 원하는 것은 특정 조건에서 앱이 실행되지 않도록 하는 것입니다.프로그램의 맨 위에 다음과 같은 것을 추가하고 싶습니다.

BEGIN
    IF [condition]
        EXIT
    END IF
    [the rest of the program]
END

제안된 방법은 예외를 던지는 것이지만 블록이 내부 블록일 수 있으므로 블록 외부의 프로그램은 계속 진행됩니다.

RETURN을 사용할 수 있습니다.

MWATSON@> set serveroutput on
MWATSON@> !cat test.sql

BEGIN
 IF 1 = 1 THEN
    DBMS_OUTPUT.PUT_LINE('ABOUT TO EXIT');
    RETURN;
  END IF;
  DBMS_OUTPUT.PUT_LINE('DID NOT EXIT');
END;

MWATSON@> @test
  8  /
ABOUT TO EXIT

PL/SQL procedure successfully completed.

MWATSON@> 

답변하기에는 너무 늦었다는 것을 알지만, 이전 답변에서 언급되지 않은 방법이 하나 더 있습니다.

RAISE_APPLICATION_ERROR를 사용하고 EXECUMENT 섹션에서 이 예외를 포착합니다.이렇게 하면 커밋되지 않은 트랜잭션이 롤백되므로 필요한 경우 명시적으로 커밋해야 합니다.

이렇게 하면 리턴을 사용할 때 IF 블록에서 예외 처리를 수행하는 대신 프로그램에서 정상적으로 돌아올 수 있습니다.

저는 이것을 참고용으로 사용했습니다.http://www.plsql-tutorial.com/plsql-exception-handling.htm

블록이 처리하지 않는 예외를 발생시키면 예외는 항상 호출자에게 발생합니다.따라서 처리를 중지하는 가장 쉬운 방법은 콜 스택의 어느 곳에서도 처리되지 않는 예외를 발생시키는 것입니다.

예.

DECLARE
    e_halt_processing EXCEPTION;
BEGIN
    IF [condition] THEN
        RAISE e_halt_processing;
    END IF;
    [the rest of the program]
END;

PL/SQL은 모르지만 (단어를 사용하여) 시도해 보는 것은 어떨까요?

BEGIN
    IF [!condition]
        [the rest of the program]
    END IF
END

그냥 생각하는

순차(내포되지 않은) pl/sql 블록을 사용하고 별도의 예외 처리를 사용하는 한 RAISE는 완벽하게 작동합니다.중첩된 블록에서 예외를 발생시키는 경우 레이스 상태에 주의해야 합니다.

언급URL : https://stackoverflow.com/questions/891458/abort-a-pl-sql-program