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
'programing' 카테고리의 다른 글
루비: 범위 내에서, 그러나 세트 증분으로 반복하는 방법은 무엇입니까? (0) | 2023.07.04 |
---|---|
C의 배열에 여러 값 할당 (0) | 2023.07.04 |
R에서 데이터 프레임에 행을 추가하는 방법은 무엇입니까? (0) | 2023.07.04 |
JPA - DDL에서 문자열 열을 varchar(max)로 설정하는 방법 (0) | 2023.06.29 |
어떻게 하면 Git-diff처럼 일을 어렵게 할 수 있을까요? (0) | 2023.06.29 |