次の方法で共有


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

    条件ハンドラーをトリガーした条件を返します。 ハンドラーの最初のステートメントとして issue GET DIAGNOSTICS CONDITION 1 を呼び出す必要があります。

    • MESSAGE_TEXT

      条件に関連付けられたメッセージ テキストを STRINGとして返します。 variable_nameSTRING である必要があります。

    • RETURNED_SQLSTATE

      SQLSTATEとして処理される条件に関連付けられているSTRINGを返します。 variable_nameSTRING である必要があります。

    • MESSAGE_ARGUMENTS

      Databricks 条件のパラメーターへの引数として指定された MAP<STRING, STRING> マッピングを返します。 宣言された条件の場合、マップ キーは MESSAGE_TEXTのみです。 variable_nameMAP<STRING, STRING> でなければなりません

    • CONDITION_IDENTIFIER

      例外の原因となった条件名を返します。 variable_nameSTRING である必要があります。

    • 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