适用于:
 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 = array_join(transform(map_entries(args), t -> concat_ws(' ', 'Param:', t.key, 'Val:', t.value)), ' ');
        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