EXECUTE IMMEDIATE¶
Exécute une chaîne qui contient une instruction SQL ou une instruction Exécution de scripts Snowflake.
Vous pouvez utiliser EXECUTE IMMEDIATE pour effectuer les opérations suivantes :
Dans un bloc Snowflake Scripting, exécutez l’instruction SQL dynamique, dans laquelle certaines parties de l’instruction SQL ne sont connues qu’au moment de l’exécution. Pour des exemples, voir Exécution de SQL dynamiques dans un bloc Snowflake Scripting.
Définissez une variable de session avec une instruction SQL et faites référence à la variable de session pour exécuter l’instruction SQL. Pour un exemple, voir Définition d’une variable de session sur une instruction et exécution de celle-ci.
If you are using SnowSQL or Snowsight, run a Snowflake Scripting anonymous block. For an example, see Running an anonymous block in SnowSQL or Snowsight.
Syntaxe¶
EXECUTE IMMEDIATE '<string_literal>'
[ USING ( <bind_variable> [ , <bind_variable> ... ] ) ]
EXECUTE IMMEDIATE <variable>
[ USING ( <bind_variable> [ , <bind_variable> ... ] ) ]
EXECUTE IMMEDIATE $<session_variable>
[ USING ( <bind_variable> [ , <bind_variable> ... ] ) ]
Paramètres requis¶
'string_literal'ou .variableou .session_variableUn littéral de chaîne, une variable Exécution de scripts Snowflake ou une variable de session qui contient une instruction. Une instruction peut être l’un des éléments suivants :
Une seule instruction SQL
Un appel de procédure stockée
Une instruction de flux de contrôle (par exemple, une instruction looping ou branching)
Un bloc
Si vous utilisez une variable de session, la longueur de l’instruction ne doit pas dépasser la taille maximale d’une variable de session (256 octets).
Paramètres facultatifs¶
USING ( bind_variable [ , bind_variable ... ] )Spécifie une ou plusieurs variables de liaison qui contiennent des valeurs à utiliser dans la définition de la requête du curseur (par exemple, dans une clause WHERE).
Renvoie¶
EXECUTE IMMEDIATE renvoie le résultat de l’instruction exécutée. Par exemple, si la chaîne ou la variable contient une instruction SELECT, le jeu de résultats de SELECT est renvoyé.
Notes sur l’utilisation¶
Le
string_literal, lavariableou lasession_variablene doivent contenir qu’une seule instruction. (Un bloc est considéré comme une seule instruction, même si le corps du bloc en contient plusieurs).Une
session_variabledoit être précédée d’un signe dollar ($).Une
variablelocale doit ne pas être précédée d’un signe dollar ($).
Exemples¶
Les exemples suivants utilisent la commande EXECUTE IMMEDIATE.
Exécution de SQL dynamiques dans un bloc Snowflake Scripting¶
Les exemples suivants exécutent les SQL dynamiques dans un bloc Snowflake Scripting.
Exécution d’instructions contenant des variables¶
Cet exemple exécute des instructions qui sont définies dans deux variables locales dans une procédure stockée Snowflake Scripting. Cet exemple démontre également que EXECUTE IMMEDIATE fonctionne non seulement avec un littéral de chaîne, mais aussi avec une expression qui est évaluée sur une chaîne (VARCHAR).
CREATE PROCEDURE execute_immediate_local_variable()
RETURNS VARCHAR
AS
DECLARE
v1 VARCHAR DEFAULT 'CREATE TABLE temporary1 (i INTEGER)';
v2 VARCHAR DEFAULT 'INSERT INTO temporary1 (i) VALUES (76)';
result INTEGER DEFAULT 0;
BEGIN
EXECUTE IMMEDIATE v1;
EXECUTE IMMEDIATE v2 || ',(80)' || ',(84)';
result := (SELECT SUM(i) FROM temporary1);
RETURN result::VARCHAR;
END;
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
CREATE PROCEDURE execute_immediate_local_variable()
RETURNS VARCHAR
AS
$$
DECLARE
v1 VARCHAR DEFAULT 'CREATE TABLE temporary1 (i INTEGER)';
v2 VARCHAR DEFAULT 'INSERT INTO temporary1 (i) VALUES (76)';
result INTEGER DEFAULT 0;
BEGIN
EXECUTE IMMEDIATE v1;
EXECUTE IMMEDIATE v2 || ',(80)' || ',(84)';
result := (SELECT SUM(i) FROM temporary1);
RETURN result::VARCHAR;
END;
$$;
Appelez la procédure stockée :
CALL execute_immediate_local_variable();
+----------------------------------+
| EXECUTE_IMMEDIATE_LOCAL_VARIABLE |
|----------------------------------|
| 240 |
+----------------------------------+
Exécution d’une instruction contenant des variables de liaison¶
Cet exemple utilise EXECUTE IMMEDIATE pour exécuter une instruction SELECT qui contient des variables de liaison dans le paramètre USING d’une procédure stockée Snowflake Scripting. Commencez par créer la table et par insérer les données :
CREATE OR REPLACE TABLE invoices (id INTEGER, price NUMBER(12, 2));
INSERT INTO invoices (id, price) VALUES
(1, 11.11),
(2, 22.22);
Créez la procédure stockée :
CREATE OR REPLACE PROCEDURE min_max_invoices_sp(
minimum_price NUMBER(12,2),
maximum_price NUMBER(12,2))
RETURNS TABLE (id INTEGER, price NUMBER(12, 2))
LANGUAGE SQL
AS
DECLARE
rs RESULTSET;
query VARCHAR DEFAULT 'SELECT * FROM invoices WHERE price > ? AND price < ?';
BEGIN
rs := (EXECUTE IMMEDIATE :query USING (minimum_price, maximum_price));
RETURN TABLE(rs);
END;
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
CREATE OR REPLACE PROCEDURE min_max_invoices_sp(
minimum_price NUMBER(12,2),
maximum_price NUMBER(12,2))
RETURNS TABLE (id INTEGER, price NUMBER(12, 2))
LANGUAGE SQL
AS
$$
DECLARE
rs RESULTSET;
query VARCHAR DEFAULT 'SELECT * FROM invoices WHERE price > ? AND price < ?';
BEGIN
rs := (EXECUTE IMMEDIATE :query USING (minimum_price, maximum_price));
RETURN TABLE(rs);
END;
$$
;
Appelez la procédure stockée :
CALL min_max_invoices_sp(20, 30);
+----+-------+
| ID | PRICE |
|----+-------|
| 2 | 22.22 |
+----+-------+
Définition d’une variable de session sur une instruction et exécution de celle-ci¶
Cet exemple exécute une instruction définie dans une variable de session :
SET stmt =
$$
SELECT PI();
$$
;
EXECUTE IMMEDIATE $stmt;
+-------------+
| PI() |
|-------------|
| 3.141592654 |
+-------------+
Running an anonymous block in SnowSQL or Snowsight¶
When you run a Snowflake Scripting anonymous block in SnowSQL or Snowsight, you must specify the block as a string literal (delimited by single quotes or double dollar signs), and you must pass the block to the EXECUTE IMMEDIATE command. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Cet exemple exécute un bloc anonyme transmis à la commande EXECUTE IMMEDIATE :
EXECUTE IMMEDIATE $$
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := PI() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
+-----------------+
| anonymous block |
|-----------------|
| 28.274333882 |
+-----------------+