적용 대상: 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 }
매개 변수
-
지역 변수 또는 세션 변수입니다.
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