Condividi tramite


GET istruzione DIAGNOSTICS

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

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