Partilhar via


EXECUTE IMMEDIATE

Aplica-se a:Sim, verificado Databricks SQL Sim, verificado 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 suporta USING ( { arg_expr [ AS ] [alias] } [, ...] )

Parâmetros

  • sql_string

    Uma STRINGexpressão constante, produzindo uma instrução SQL bem formada.

    Se sql_string contiver marcadores de parâmetro, eles devem ser todos posicionais (?) ou todos nomeados (:parm1).

    Antes do Databricks, o Runtime 17.3 sql_string deve ser literal ou variável. Não se pode aninhar declaraçõ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á INVALID_STATEMENT_FOR_EXECUTE_INTO erro.

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

    • var_name

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

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

    Opcionalmente, se sql_string contém marcadores de parâmetro, vincula em valores aos parâmetros.

    • arg_expr

      Uma expressão constante que se liga a um marcador de parâmetro. Se os marcadores de parâmetro não forem nomeados, a ligação será por posição. Para marcadores de parâmetros nomeados, a vinculação é por nome.

    ** Antes da versão 17.3 do Databricks Runtime, arg_expr deve ser um literal ou uma variável.

    • alias

      Substitui o nome usado para vincular arg_expr a um marcador de parâmetro nomeado. Cada marcador de parâmetro nomeado deve ser correspondido uma vez. Nem sempre arg_expr precisa ser correspondido.

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;
> DECLARE sqlStr = 'SELECT SUM(c1) FROM VALUES(:first), (:second) AS t(c1)';
> EXECUTE IMMEDIATE sqlStr INTO sum USING arg1, arg2;
> SELECT sum;
  11

-- Using named parameter markers
> DECLARE sum INT;
> DECLARE 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

-- Using constant expressions
> DECLARE func STRING DEFAULT 'sum';
> EXECUTE IMMEDIATE 'SELECT ' || func || '(c1) FROM VALUES(:first), (:second) AS t(c1)'
  USING 5 + 7 AS first, length('hello') AS second;
 19