다음을 통해 공유


GET DIAGNOSTICS 문서

적용 대상:확인 표시 예 Databricks SQL 확인 표시 예 Databricks Runtime 16.3 이상

중요하다

이 기능은 공개 미리보기 단계에 있습니다.

예외 처리기에서 처리된 조건에 대한 정보를 검색합니다.

이 문은 복합 문조건 처리기 내에서만 사용할 수 있습니다.

문법

GET DIAGNOSTICS CONDITION 1
  { variable_name = condition_info_item } [, ...]

condition_info_item
  { MESSAGE_TEXT |
    RETURNED_SQLSTATE |
    MESSAGE_ARGUMENTS |
    CONDITION_IDENTIFIER |
    LINE_NUMBER }

매개 변수

  • variable_name

    지역 변수 또는 세션 변수입니다.

  • CONDITION 1

    조건 처리기를 트리거한 조건을 반환합니다. 핸들러에서 첫 번째 명령문으로 반드시 문제 GET DIAGNOSTICS CONDITION 1을 호출해야 합니다.

    • MESSAGE_TEXT

      조건에 연결된 메시지 텍스트를 STRING로 반환합니다. variable_name은(는) STRING이어야 합니다.

    • RETURNED_SQLSTATE

      조건을 처리할 때 연결된 SQLSTATE을(를) STRING로 반환합니다. variable_name은(는) STRING이어야 합니다.

    • MESSAGE_ARGUMENTS

      Databricks 조건의 매개 변수에 대한 인수로 제공된 MAP<STRING, STRING> 매핑을 반환합니다. 선언된 조건의 경우 유일한 맵 키는 MESSAGE_TEXT. variable_name은/는 MAP<STRING, STRING>이어야 합니다

    • CONDITION_IDENTIFIER

      예외를 발생시킨 조건 이름을 반환합니다. variable_name은(는) STRING이어야 합니다.

    • LINE_NUMBER

      조건을 발생시키는 문의 줄 번호를 반환합니다. 사용할 수 없는 경우 NULL.

예제

-- Retrieve the number of rows inserted by an INSERT statement
> CREATE OR REPLACE TABLE emp(name STRING, salary DECIMAL(10, 2));

> BEGIN
    DECLARE EXIT HANDLER FOR DIVIDE_BY_ZERO
      BEGIN
        DECLARE cond STRING;
        DECLARE message STRING;
        DECLARE state STRING;
        DECLARE args MAP<STRING, STRING>;
        DECLARE line BIGINT;
        DECLARE argstr STRING;
        DECLARE log STRING;
        GET DIAGNOSTICS CONDITION 1
           cond    = CONDITION_IDENTIFIER,
           message = MESSAGE_TEXT,
           state   = RETURNED_SQLSTATE,
           args    = MESSAGE_ARGUMENTS,
           line    = LINE_NUMBER;
        SET argstr =
          (SELECT aggregate(array_agg('Parm:' || key || ' Val: value '),
                            '', (acc, x)->(acc || ' ' || x))
             FROM explode(args) AS args(key, val));
        SET log = 'Condition: ' || cond ||
                  ' Message: ' || message ||
                  ' SQLSTATE: ' || state ||
                  ' Args: ' || argstr ||
                  ' Line: ' || line;
        VALUES (log);
      END;
    SELECT 10/0;
  END;
 Condition: DIVIDE_BY_ZERO Message: Division by zero. Use try_divide to tolerate divisor being 0 and return NULL instead. If necessary, set <config> to “false” to bypass this error. SQLATTE: 22012 Args:  Parm: config Val: ANSI_MODE Line: 28