Condividi tramite


GET istruzione DIAGNOSTICS

Si applica a:contrassegnato sì Databricks SQL contrassegnato sì Databricks Runtime 16.3 e versioni successive

Importante

Questa funzionalità si trova in anteprima pubblica.

Recuperare informazioni su una condizione gestita in un gestore eccezioni.

Questa istruzione può essere usata solo all'interno di un gestore di condizioni in un'istruzione composta .

Sintassi

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

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

Parametri

  • variable_name

    Variabile locale o variabile di sessione.

  • CONDITION 1

    Restituisce la condizione che ha attivato il gestore della condizione. È necessario chiamare la segnalazione GET DIAGNOSTICS CONDITION 1 come prima istruzione nel gestore.

    • MESSAGE_TEXT

      Restituisce il testo del messaggio associato alla condizione come STRING. variable_name deve essere un STRING.

    • RETURNED_SQLSTATE

      Restituisce il SQLSTATE associato alla condizione gestita come STRING. variable_name deve essere un STRING.

    • MESSAGE_ARGUMENTS

      Restituisce un mapping MAP<STRING, STRING> fornito come argomenti ai parametri delle condizioni di Databricks. Per le condizioni dichiarate, l'unica chiave della mappa è MESSAGE_TEXT. variable_name deve essere un MAP<STRING, STRING>

    • CONDITION_IDENTIFIER

      Restituisce il nome della condizione che ha causato l'eccezione. variable_name deve essere un STRING.

    • LINE_NUMBER

      Restituisce il numero di riga dell'istruzione che genera la condizione. NULL se non disponibile.

Esempi

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