Compartilhar via


Scripts SQL

Aplica-se a:verificação marcada como sim Databricks SQL verificação marcada como sim Databricks Runtime 16.3 e superior

Você pode empregar uma lógica de procedimento avançada usando a sintaxe de script baseada em padrão do SQL/PSM. Qualquer script SQL consiste em um bloco de instrução composto (BEGIN ... END) e começa com ele. Uma instrução composta começa com uma seção para declarar variáveis locais, cursores, condições definidas pelo usuário e manipuladores de condição, que são usados para capturar exceções. Isso é seguido pelo corpo da instrução composta, que consiste em:

  • As instruções de controle de fluxo incluem loops sobre expressões de predicado, loops FOR sobre resultados de consulta, lógica condicional como IF e CASE, e meios de sair de loops como LEAVE e ITERATE.
  • 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, DELETE e 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 instrução EXECUTE IMMEDIATE.
  • Instruções compostas aninhadas, que fornecem escopos aninhados para variáveis, cursores, condições e manipuladores de condição.

Como transmitir 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 mapear dados de um widget de notebook, Python ou outra linguagem para o Script SQL.

Escopo de variável e cursor

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

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

Tratamento de condição

O Script SQL dá suporte a manipuladores de condição, que são usados para interceptar e processar exceções para a instrução composta ou CONTINUE a EXIT execução (Databricks Runtime 18.1 e superior). Dentro do manipulador de condição, você pode usar RESIGNAL na exceção original, SIGNAL em uma nova exceção ou sair da instrução composta sem uma exceção.

Os manipuladores de condição 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 definida pelo Databricks específica, como DIVIDE_BY_ZERO ou uma condição declarada pelo usuário. Esses manipuladores processam essas condições específicas.

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

  • Um manipulador genérico 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 manipulador captura todas as condições com a classe '02xxx'SQLSTATE, que inclui a condição de CURSOR_NO_MORE_ROWS gerada ao buscar além do final de um conjunto de resultados do cursor (Databricks Runtime 18.1 e superior).

As opções a seguir são usadas para decidir qual manipulador de condição se aplica a uma exceção. Esse manipulador de condição é chamado de manipulador mais apropriado:

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

  • Os manipuladores de condição aplicável definidos na instrução composta mais interna na qual a exceção foi gerada 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 SQLSTATE nomeado. Um manipulador genérico EXCEPTION é o menos específico.

O resultado de um manipulador de condição é o seguinte:

  • Um EXIT manipulador executa sua instrução e, em seguida, sai da instrução composta que declarou o manipulador. Todos os cursores abertos dentro dessa instrução composta e instruções compostas aninhadas são implicitamente fechados.
  • Um CONTINUE manipulador executa sua instrução e, em seguida, continua a execução com a instrução após a que gerou a condição.
  • A menos que um manipulador use SIGNALs ou RESIGNALs em uma condição própria, o resultado de um manipulador de condição é executar a instrução após a instrução composta que declarou o manipulador para execução em seguida.

Procedimentos armazenados do SQL

Importante

Esse recurso está em Visualização Pública.

Aplica-se a: verificação marcada sim Databricks SQL check marked yes Databricks Runtime 17.0 and above

Usando a instrução CREATE PROCEDURE, você pode persistir um Script SQL no Catálogo do Unity. Em seguida, GRANT você pode conceder acesso ao procedimento a outros principais. Esses principais podem então usar a instrução CALL para invocar o procedimento.

Lista de instruções de fluxo de controle

Veja a seguir uma lista das instruções de fluxo de controle suportadas:

Lista de instruções de cursor

As instruções de cursor a seguir têm suporte no Databricks Runtime 18.1 e superior. Os cursores são declarados na instrução composta.