EXECUTE IMMEDIATE
S’applique à : Databricks SQL 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
Une variable ou un littéral
STRING
générant une instruction SQL bien formée.Vous ne pouvez pas imbriquer des instructions
EXECUTE IMMEDIATE
.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.
-
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
Un littéral ou une variable qui lie à un marqueur de paramètres. 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.
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. Lesarg_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;
> 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