Compartilhar via


EXECUTE IMMEDIATE

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

Executa uma instrução SQL fornecida como um STRING. Opcionalmente, a instrução passa argumentos para marcadores de parâmetro e atribui os resultados a variáveis.

Sintaxe

EXECUTE IMMEDIATE sql_string
        [ INTO var_name [, ...] ]
        [ USING { arg_expr [ AS ] [alias] } [, ...] ]

Para compatibilidade com outros dialetos SQL, EXECUTE IMMEDIATE também dá suporte a USING ( { arg_expr [ AS ] [alias] } [, ...] )

Parâmetros

  • sql_string

    Um STRING literal ou variável, produzindo uma instrução SQL bem formada.

    Não é possível aninhar instruções EXECUTE IMMEDIATE.

  • INTO ( var_name [, ...] )

    Opcionalmente, retorna os resultados de uma consulta de linha única em variáveis SQL. Se a consulta não retornar linhas, o resultado será NULL.

    Se a instrução não for uma consulta, o Azure Databricks gerará o erro INVALID_STATEMENT_FOR_EXECUTE_INTO.

    Se a consulta retornar mais de uma linha, o Azure Databricks gerará o erro ROW_SUBQUERY_TOO_MANY_ROWS.

    • var_name

      Uma variável SQL. Uma variável pode não ser referenciada mais de uma vez.

  • USING { arg_expr [ AS ] [alias] } [, ...]

    Opcionalmente, se sql_string contiver marcadores de parâmetro, ele associará valores aos parâmetros.

    • arg_expr

      Um literal ou variável que se associa a um marcador de parâmetro. Se os marcadores de parâmetro não forem nomeados, a associação será por posição. Para marcadores de parâmetro nomeados, a associação é por nome.

    • alias

      Substitui o nome usado para associar arg_expr a um marcador de parâmetro nomeado. Cada marcador de parâmetro nomeado deve ser correspondido uma vez. Nem todos os arg_expr devem ser correspondidos.

Exemplos

-- A self-contained execution using a literal string
> EXECUTE IMMEDIATE 'SELECT SUM(c1) FROM VALUES(?), (?) AS t(c1)' USING 5, 6;
  11

-- A SQL string composed in a SQL variable
> DECLARE sqlStr = 'SELECT SUM(c1) FROM VALUES(?), (?) AS t(c1)';
> DECLARE arg1 = 5;
> DECLARE arg2 = 6;
> EXECUTE IMMEDIATE sqlStr USING arg1, arg2;
  11

-- Using the INTO clause
> DECLARE sum INT;
> EXECUTE IMMEDIATE sqlStr INTO sum USING arg1, arg2;
> SELECT sum;
  11

-- Using named parameter markers
> SET VAR sqlStr = 'SELECT SUM(c1) FROM VALUES(:first), (:second) AS t(c1)';
> EXECUTE IMMEDIATE sqlStr INTO sum
  USING (5 AS first, arg2 AS second);
> SELECT sum;
  11