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

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

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

    Antes do Databricks Runtime 17.3, sql_string deve ser um literal ou variável. Além disso, não é possível aninhar EXECUTE IMMEDIATE declarações.

  • 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

      Uma expressão constante 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.

    Antes do Databricks Runtime 17.3, arg_expr deve ser um literal ou uma variável.

    • 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;
> 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