适用于: 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