Teilen über


GET DIAGNOSTICS-Anweisung

Gilt für:mit Häkchen markiert: ja Databricks SQL mit Häkchen markiert: ja Databricks Runtime 16.3 und höher

Abrufen von Informationen zu einer Bedingung, die in einem Ausnahmehandler behandelt wird.

Diese Anweisung darf nur innerhalb eines Bedingungshandlers in einer zusammengesetzten Anweisung verwendet werden.

Syntax

GET DIAGNOSTICS CONDITION 1
  { variable_name = condition_info_item } [, ...]

condition_info_item
  { MESSAGE_TEXT |
    RETURNED_SQLSTATE |
    MESSAGE_ARGUMENTS |
    CONDITION_IDENTIFIER |
    LINE_NUMBER }

Die Parameter

  • variable_name

    Eine lokale Variable oder Sitzungsvariable.

  • CONDITION 1

    Gibt die Bedingung zurück, die den Bedingungshandler ausgelöst hat. Sie müssen issue GET DIAGNOSTICS CONDITION 1 als erste Anweisung im Handler aufrufen.

    • MESSAGE_TEXT

      Gibt den Meldungstext, der der Bedingung zugeordnet ist, als zurück STRING. variable_name muss vom Typ STRING sein.

    • RETURNED_SQLSTATE

      Gibt die zugehörige Bedingung zurück, die SQLSTATE als STRING. variable_name muss vom Typ STRING sein.

    • MESSAGE_ARGUMENTS

      Gibt eine MAP<STRING, STRING> Zuordnung zurück, die als Argumente für die Parameter von Databricks-Bedingungen bereitgestellt wird. Für deklarierte Bedingungen ist MESSAGE_TEXTder einzige Zuordnungsschlüssel . variable_name muss ein MAP<STRING, STRING>

    • CONDITION_IDENTIFIER

      Gibt den Bedingungsnamen zurück, der die Ausnahme verursacht hat. variable_name muss vom Typ STRING sein.

    • LINE_NUMBER

      Gibt die Zeilennummer der Anweisung zurück, die die Bedingung auslöst. NULL falls nicht verfügbar.

Beispiele

-- 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