Partager via


EXECUTE IMMEDIATE

S’applique à :coche marquée oui Databricks SQL case marquée oui Databricks Runtime 14.3 et versions ultérieures

Permet d’exécuter une instruction SQL fournie comme STRING. L’instruction passe éventuellement des arguments à des marqueurs de paramètres et attribue les résultats aux variables.

Syntaxe

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

Pour bénéficier d’une compatibilité avec d’autres dialectes SQL, EXECUTE IMMEDIATE prend également en charge USING ( { arg_expr [ AS ] [alias] } [, ...] )

Paramètres

  • sql_string

    Expression STRINGconstante, produisant une instruction SQL bien formée.

    Si sql_string contient des marqueurs de paramètre, ils doivent être tous positionnels (?) ou tous nommés (:parm1).

    Avant Databricks Runtime 17.3, sql_string il doit s'agir d’un littéral ou d’une variable. Et vous ne pouvez pas imbriquer EXECUTE IMMEDIATE des déclarations.

  • INTO ( var_name [, ...] )

    Permet de retourner de manière facultative les résultats d’une seule requête de ligne dans des variables SQL. Si la requête ne renvoie aucune ligne, le résultat est NULL.

    Si l’instruction n’est pas une requête, Azure Databricks génère une erreur INVALID_STATEMENT_FOR_EXECUTE_INTO.

    Si la requête retourne plusieurs lignes, Azure Databricks génère une erreur ROW_SUBQUERY_TOO_MANY_ROWS.

    • var_name

      Variable SQL. Vous ne pouvez pas référencer une variable plusieurs fois.

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

    Si l’élément sql_string contient des marqueurs de paramètres, il lie de manière facultative des valeurs aux paramètres.

    • arg_expr

      Expression constante qui se lie à un marqueur de paramètre. Si les marqueurs de paramètres n’ont pas de nom, la liaison s’effectue par position. Pour les marqueurs de paramètres nommés, la liaison s’effectue par nom.

    Avant Databricks Runtime 17.3 arg_expr , il doit s’agit d’un littéral ou d’une variable.

    • alias

      Remplace le nom utilisé pour lier arg_expr à un marqueur de paramètre nommé. Chaque marqueur de paramètre nommé doit être mis en correspondance une seule fois. Les arg_expr ne sont pas tous mis en correspondance.

Exemples

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