Partilhar via


Declaração composta BEGIN END

Aplica-se a:marcado como sim Databricks SQL marcado como sim Databricks Runtime 16.3 e superior

Implementa um bloco de Script SQL que pode conter uma sequência de instruções SQL, instruções de controle de fluxo, declarações de variáveis locais e manipuladores de exceções.

Observação

Ao invocar uma instrução composta de um bloco de anotações, ela deve ser a única instrução na célula.

Sintaxe

[ label : ]
      BEGIN
      [ { declare_variable | declare_condition } ; [...] ]
      [ declare_handler ; [...] ]
      [ SQL_statement ; [...] ]
      END [ label ]

declare_variable
  DECLARE variable_name [, ...] datatype [ DEFAULT default_expr ]

declare_condition
  DECLARE condition_name CONDITION [ FOR SQLSTATE [ VALUE ] sqlstate ]

declare_handler
  DECLARE handler_type HANDLER FOR condition_values handler_action

handler_type
  EXIT

condition_values
 { { SQLSTATE [ VALUE ] sqlstate | condition_name } [, ...] |
   { SQLEXCEPTION | NOT FOUND } [, ...] }

Antes do Databricks Runtime 17.2, você só podia declarar uma variável de cada vez.

Parâmetros

  • rótulo

    Um identificador opcional é usado para qualificar variáveis definidas dentro do composto e para sair do composto. Ambas as ocorrências de rótulo devem corresponder, e o rótulo END só pode ser especificado se label: for também especificado.

    do rótulo não deve ser especificado para uma estrutura composta de nível superior.

  • NOT ATOMIC

    Especifica que, se uma instrução SQL dentro do composto falhar, as instruções SQL anteriores não serão revertidas. Este é o comportamento padrão e único.

  • declare_variable

    Uma declaração de variável local para uma ou mais variáveis

    • variable_name

      Um nome para a variável. O nome não deve ser qualificado e deve ser exclusivo dentro da declaração composta.

    • data_type

      Qualquer tipo de dados suportado. Se o data_type for omitido, deverá especificar DEFAULT, e o tipo será derivado da expressão padrão.

    • { DEFAULT | = } default_expression

      Define o valor inicial da variável após a declaração. default_expression deve ser convertível para data_type. Se nenhum padrão for especificado, a variável será inicializada com NULL.

  • Declare_condition

    Uma declaração de condição local

    • condition_name

      O nome não qualificado da condição está delimitado pela instrução composta.

    • sqlstate

      Um literal STRING de 5 caracteres alfanuméricos (sem distinção entre maiúsculas e minúsculas) que consiste em A-Z e 0..9. O SQLSTATE não deve começar com '00', '01' ou 'XX'. Qualquer SQLSTATE começando com '02' será capturado também pela exceção predefinida NOT FOUND. Se não for especificado, o SQLSTATE será '45000'.

  • declare_handler

    Uma declaração para um manipulador de erros.

    • handler_type

      • EXIT

        Designa o manipulador para sair da instrução composta depois que a condição é tratada.

    • condition_values

      Especifica a quais sqlstates ou condições o manipulador se aplica. Os valores de condição devem ser exclusivos em todos os manipuladores dentro da instrução composta. Os valores de condição específica têm precedência sobre SQLEXCEPTION.

    • sqlstate

      Um literal de 5 caracteres STRING, 'A'-'Z' e '0'-'9' (sem distinção de maiúsculas e minúsculas).

    • condition_name

      Uma condição definida dentro desse composto, uma instrução composta externa ou uma classe de erro definida pelo sistema.

    • SQLEXCEPTION

      Aplica-se a qualquer condição de erro voltada para o usuário.

    • NOT FOUND

      Aplica-se a qualquer condição de erro com uma classe SQLSTATE '02'.

    • handler_action

      Uma instrução SQL para executar quando qualquer um dos valores de condição ocorrer. Para adicionar várias instruções, use uma instrução composta aninhada.

  • SQL_statement

    Uma instrução SQL, como DDL, DML, instrução de controle ou instrução composta. Qualquer instrução SELECT ou VALUES produz um conjunto de resultados que o invocador pode consumir.

Exemplos

-- A compound statement with local variables, and exit hanlder and a nested compound.
> BEGIN
    DECLARE a INT DEFAULT 1;
    DECLARE b INT DEFAULT 5;
    DECLARE EXIT HANDLER FOR DIVIDE_BY_ZERO
      div0: BEGIN
        VALUES (15);
      END div0;
    SET a = 10;
    SET a = b / 0;
    VALUES (a);
END;
15