Delen via


GET DIAGNOSTICS-verklaring

Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 16.3 en hoger

Belangrijk

Deze functie bevindt zich in openbare preview.

Informatie ophalen over een voorwaarde die wordt verwerkt in een uitzonderingshandler.

Deze instructie mag alleen worden gebruikt binnen een condition handler in een samengestelde instructie .

Syntaxis

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

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

Parameterwaarden

  • variable_name

    Een lokale variabele of sessievariabele.

  • CONDITION 1

    Retourneert de voorwaarde die de voorwaarde-handler heeft geactiveerd. U moet issue GET DIAGNOSTICS CONDITION 1 aanroepen als het eerste statement in de handler.

    • MESSAGE_TEXT

      Retourneert de berichttekst die is gekoppeld aan de voorwaarde als een STRING. variable_name moet een STRINGzijn.

    • RETURNED_SQLSTATE

      Retourneert de SQLSTATE die is gekoppeld aan de voorwaarde die als een STRING wordt afgehandeld. variable_name moet een STRINGzijn.

    • MESSAGE_ARGUMENTS

      Hiermee wordt een MAP<STRING, STRING>-toewijzing geretourneerd, voorzien van argumenten, voor de parameters van de Databricks-voorwaarden. Voor opgegeven voorwaarden is de enige sleutel van de kaart MESSAGE_TEXT. variable_name moet een MAP<STRING, STRING>

    • CONDITION_IDENTIFIER

      Retourneert de naam van de conditie die de uitzondering heeft veroorzaakt. variable_name moet een STRINGzijn.

    • LINE_NUMBER

      Retourneert het regelnummer van de instructie die de voorwaarde verhoogt. NULL indien niet beschikbaar.

Voorbeelden

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