RESIGNAL 문

RESIGNAL 문 (RESIGNAL Statement)

RESIGNAL 문은 조건(condition) 또는 예외 핸들러(exception handler) 안에서 오류를 다시 던져(re-raise) 상위 레벨에서 처리되도록 할 때 사용하는 문이에요.

출처: 문서

본문

구문 (Syntax):

RESIGNAL

RESIGNAL SQLSTATE [VALUE] sqlstate [SET MESSAGE_TEXT = message_text]

예제 1 (Example 1):

같은 오류를 다시 던집니다.

BEGIN
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
  BEGIN
    PRINT 'Error raised';
    RESIGNAL;
  END;
  PRINT 'Before executing SQL';
  SELECT * FROM abc.abc;      -- Table does not exist, error will be raised
  PRINT 'After executing SQL - will not be printed in case of error';
END;

결과:

Before executing SQL
Error raised

예제 2 (Example 2):

바깥쪽 조건 핸들러에서 다시 던져진 조건을 잡습니다.

BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
    PRINT 'Error raised, outer handler';

  BEGIN
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
      PRINT 'Error raised, resignal';
      RESIGNAL;
    END;
    PRINT 'Before executing SQL';
    SELECT * FROM abc.abc;       -- Table does not exist, error will be raised
    PRINT 'After executing SQL - must not be printed';
  END;
  PRINT 'Continue outer block after exiting inner';
END;

결과:

Before executing SQL
Error raised, resignal
Error raised, outer handler
Continue outer block after exiting inner

예제 3 (Example 3):

지정된 SQLSTATE와 메시지 텍스트로 조건을 다시 던집니다.

BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    GET DIAGNOSTICS EXCEPTION 1 text = MESSAGE_TEXT;
    PRINT 'SQLSTATE: ' || SQLSTATE;
    PRINT 'Text: ' || text;
  END; 

  BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
      RESIGNAL SQLSTATE '02031' SET MESSAGE_TEXT = 'Some error';

    SELECT * FROM abc.abc;    -- Table does not exist, raise an exception
  END;
END;

결과:

SQLSTATE: 02031
Text: Some error

호환성 (Compatibility): IBM DB2, Teradata, MySQL

더 보기 (See also):

  • 오류 처리 (Error Handling)
  • DECLARE CONDITION
  • DECLARE HANDLER
  • SQLCODE
  • SQLSTATE
  • GET DIAGNOSTICS
  • SIGNAL

더 알아보기 (Learn more)

RESIGNAL은 한 번 잡았던 예외를 상위 핸들러로 다시 전파하고 싶을 때 유용해요. 조건 핸들러(DECLARE CONTINUE/EXIT HANDLER)와 함께 쓰며, SIGNAL과는 달리 이미 발생한 조건을 다시 던지는 역할을 합니다.