Partilhar via


Scripting SQL

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

Você pode empregar uma lógica processual poderosa usando a sintaxe de script baseada no padrão SQL/PSM. Qualquer script SQL consiste de e começa com um bloco de instruções compostas (BEGIN ... END). Uma instrução composta começa com uma secção para declarar variáveis locais, cursores, condições definidas pelo utilizador e manipuladores de condições, que são usados para detetar exceções. Segue-se o corpo da declaração composta, que consiste em:

  • As instruções de controle de fluxo incluem loops sobre expressões de predicados loops FOR sobre resultados de consulta, lógica condicional como IF e CASEe meios para quebrar loops como LEAVE e ITERAR.
  • Processamento de cursor com instruções OPEN,FETCH e CLOSE (Databricks Runtime 18.1 e superior).
  • Instruções DDL como ALTER, CREATE, DROP.
  • Instruções DCL (Controle de Dados), como GRANT e REVOKE.
  • Instruções DML INSERT, UPDATE, DELETEe MERGE.
  • Consultas que retornam conjuntos de resultados para o invocador do script.
  • SET instruções para definir variáveis locais, bem como variáveis de sessão.
  • A declaração EXECUTE IMMEDIATE.
  • Instruções compostas aninhadas, que fornecem escopos aninhados para variáveis, cursores, condições e manipuladores de condições.

Passando dados entre o invocador e a instrução composta

Há duas maneiras de passar dados de e para um script SQL:

  • Use variáveis de sessão para passar valores escalares ou pequenos conjuntos de matrizes ou mapas de um script SQL para outro.
  • Use marcadores de parâmetro para passar valores escalares ou pequenos conjuntos de matrizes ou dados de mapa de um widget de bloco de anotações, Python ou outra linguagem para o Script SQL.

Escopo de variáveis e cursor

As variáveis declaradas dentro de uma instrução composta podem ser referenciadas em qualquer expressão dentro de uma instrução composta. O Databricks resolve identificadores do escopo mais interno para fora, seguindo as regras descritas em Resolução de Nomes. Você pode usar a instrução composta opcional rótulos para desambiguar nomes de variáveis duplicados.

Os cursores declarados dentro de uma instrução composta podem ser referenciados em OPEN, FETCH, e CLOSE as instruções dentro dessa instrução composta. Tal como as variáveis, pode usar rótulos opcionais de instruções compostas para desambiguar nomes de cursor duplicados em escopos aninhados.

Tratamento de condições

SQL Scripting suporta manipuladores de condições, que são usados para intercetar e processar exceções à EXIT instrução composta ou CONTINUE à execução (Databricks Runtime 18.1 e superior). No manipulador de condições, você pode RESIGNAL a exceção original, SIGNAL uma nova exceção ou sair da instrução composta sem uma exceção.

Os manipuladores de condições podem ser definidos para lidar com três classes distintas de condições:

  • Uma ou mais condições nomeadas que podem ser uma classe de erro específica definida pelo Databricks, como DIVIDE_BY_ZERO ou uma condição declarada pelo usuário. Estes manipuladores lidam com estas condições específicas.

  • Um ou mais SQLSTATEs, que podem ser gerados pelo Databricks ou por uma instrução de utilizador SIGNAL. Esses manipuladores podem lidar com qualquer condição associada a esse SQLSTATE.

  • Um manipulador genérico de SQLEXCEPTION pode capturar todas as condições que se enquadram no SQLEXCEPTION (qualquer SQLSTATE que não seja XX*** e não 02***).

  • Um NOT FOUND handler apanha todas as condições com a classe '02xxx'SQLSTATE , que inclui a condição CURSOR_NO_MORE_ROWS levantada ao buscar para além do final de um conjunto de resultados de cursor (Databricks Runtime 18.1 e superior).

Os itens a seguir são usados para decidir qual manipulador de condição se aplica a uma exceção. Este manipulador de condição é chamado de manipulador mais apropriado:

  • Um manipulador de condição não pode se aplicar a qualquer instrução definida em seu próprio corpo ou ao corpo de qualquer manipulador de condição declarado na mesma instrução composta.

  • Os manipuladores de condição aplicáveis definidos na instrução composta mais interna dentro da qual a exceção foi levantada são apropriados.

  • Se mais de um manipulador apropriado estiver disponível, o manipulador mais específico será o mais apropriado. Por exemplo, um manipulador em uma condição nomeada é mais específico do que um em um SQLSTATEnomeado. Um manipulador de EXCEPTION genérico é o menos específico.

O resultado de um manipulador de condições é o seguinte:

  • Um handler executa a sua instrução e depois sai da instrução composta que declarou EXIT o handler. Todos os cursores abertos dentro dessa instrução composta e instruções compostas aninhadas estão implicitamente fechados.
  • Um CONTINUE handler executa a sua instrução e depois continua a execução com a instrução seguinte à que elevou a condição.
  • A menos que um manipulador SIGNALou RESIGNALdefina uma condição sua, o resultado de um manipulador de condição é executar a instrução que segue a instrução composta que declarou o manipulador para ser executado a seguir.

Procedimentos armazenados SQL

Importante

Este recurso está no Public Preview.

Aplica-se a: sim, marcado para Databricks SQL sim, marcado para Databricks Runtime 17.0 e superiores

Usando a instrução CREATE PROCEDURE , você pode persistir um script SQL no Unity Catalog. Em seguida, você pode acessar GRANT o procedimento para outras entidades. Os principais podem então utilizar a instrução CALL para invocar o procedimento.

Lista de instruções de fluxo de controle

Segue-se uma lista de instruções de fluxo de controlo suportadas:

Lista de Instruções do Cursor

As seguintes instruções de cursor são suportadas no Databricks Runtime 18.1 e superiores. Os cursores são declarados na instrução composta.