適用対象: 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
条件ハンドラーをトリガーした条件を返します。 ハンドラーの最初のステートメントとして issue
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