DECLARE (Exécution de scripts Snowflake)¶
Déclare un(e) ou plusieurs variables d’exécution des scripts Snowflake, curseurs, RESULTSETs, procédures stockées imbriquées ou exceptions.
Pour plus d’informations, consultez les rubriques suivantes :
- Voir aussi:
Syntaxe¶
DECLARE
{ <variable_declaration>
| <cursor_declaration>
| <resultset_declaration>
| <nested_stored_procedure_declaration>
| <exception_declaration> };
[
{ <variable_declaration>
| <cursor_declaration>
| <resultset_declaration>
| <nested_stored_procedure_declaration>
| <exception_declaration> };
...
]
Les sections suivantes décrivent plus en détail la syntaxe de chaque type de déclaration :
Syntaxe de déclaration des variables¶
Utilisez la syntaxe suivante pour déclarer une variable.
<variable_declaration> ::=
<variable_name> [<type>] [ { DEFAULT | := } <expression>]
Où :
variable_name
Nom de la variable. Le nom doit suivre les règles de dénomination pour Identificateurs d’objet.
type
DEFAULT expression
ou .:= expression
Affecte la valeur de l’expression
expression
à la variable. Sitype
etexpression
sont tous deux spécifiés, l’expression doit correspondre à un type de données qui correspond, ou peut être implicitement converti autype
spécifié.
Par exemple :
profit NUMBER(38, 2) := 0;
Pour un exemple complet, voir Exemples.
Pour plus d’informations sur les variables, voir Utilisation des variables.
Syntaxe de déclaration des curseurs¶
Utilisez la syntaxe suivante pour déclarer un curseur.
<cursor_declaration> ::=
<cursor_name> CURSOR FOR <query>
Où :
cursor_name
Le nom à donner au curseur. Il peut s’agir de tout identificateur Snowflake valide qui n’est pas déjà utilisé dans ce bloc. L’identificateur est utilisé par d’autres commandes liées au curseur, comme
FETCH
.query
La requête qui définit le jeu de résultats sur lequel le curseur itère.
Il peut s’agir de presque n’importe quelle instruction SELECT valide. Pour spécifier des paramètres de liaison dans l’instruction SELECT, utilisez des points d’interrogation (
?
). Vous pouvez lier les paramètres pour lier des variables dans les clauses USING lorsque vous ouvrez le curseur.
Par exemple :
c1 CURSOR FOR SELECT id, price FROM invoices;
Pour plus d’informations sur les curseurs (y compris des exemples complets), voir Utilisation des curseurs.
Syntaxe de la déclaration RESULTSET¶
Utilisez la syntaxe suivante pour déclarer un RESULTSET :
<resultset_name> RESULTSET [ { DEFAULT | := } [ ASYNC ] ( <query> ) ] ;
Où :
resultset_name
Le nom à donner au RESULTSET.
Le nom doit être unique dans le scope actuel.
Le nom doit suivre les règles de dénomination pour Identificateurs d’objet.
ASYNC
Exécute la requête en tant que tâche enfant asynchrone.
La requête peut être n’importe quelle instruction SQL valide, y compris des instructions SELECT et DML telles que INSERT ou UPDATE.
Lorsque ce mot-clé est omis, la procédure stockée exécute les tâches enfants de manière séquentielle, et chaque tâche enfant attend que la tâche enfant en cours se termine avant de démarrer.
Vous pouvez utiliser ce mot-clé pour exécuter plusieurs tâches enfants simultanément, ce qui peut améliorer l’efficacité et réduire le temps d’exécution global.
Vous pouvez utiliser les instructions AWAIT et CANCEL pour gérer des tâches enfants asynchrones pour un RESULTSET.
DEFAULT query
ou .:= query
Assigne la valeur de
query
à RESULTSET.
Par exemple :
res RESULTSET DEFAULT (SELECT col1 FROM mytable ORDER BY col1);
Pour plus d’informations sur RESULTSETs (y compris des exemples complets), voir Utilisation des RESULTSETs.
Syntaxe de déclaration des procédures stockées imbriquées¶
Utilisez la syntaxe suivante pour déclarer une procédure stockée imbriquée :
<nested_procedure_name> PROCEDURE (
[ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS { <result_data_type> | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
AS <nested_procedure_definition>
Où :
nested_procedure_name
Le nom de la procédure stockée imbriquée. Le nom doit suivre les règles de dénomination pour Identificateurs d’objet.
( [ arg_name arg_data_type ] [ , ... ] )
Spécifie les arguments d’entrée pour la procédure stockée imbriquée.
Pour
arg_name
, spécifiez le nom de l’argument d’entrée.Pour
arg_data_type
, spécifiez un type de données SQL.
RETURNS { result_data_type | TABLE ( [ col_name col_data_type [ , ... ] ] ) }
Spécifie le type du résultat renvoyé par la procédure stockée. Actuellement, NOT NULL n’est pas pris en charge dans le paramètre RETURNS pour les procédures stockées imbriquées.
Pour
RETURNS result_data_type
, spécifiez un type de données SQL.Pour
RETURNS TABLE ( [ col_name col_data_type [ , ... ] ] )
, si vous connaissez les types de données Snowflake des colonnes de la table renvoyée, spécifiez les noms et les types de colonnes :RETURNS TABLE (sales_date DATE, quantity NUMBER)
Sinon (par exemple, si vous déterminez les types de colonnes pendant l’exécution), vous pouvez omettre les noms et les types de colonnes :
RETURNS TABLE ()
Note
Actuellement, dans la clause
RETURNS TABLE(...)
, vous ne pouvez pas spécifier GEOGRAPHY comme type de colonne. Ceci s’applique, que vous créiez une procédure stockée ou anonyme.CREATE OR REPLACE PROCEDURE test_return_geography_table_1() RETURNS TABLE(g GEOGRAPHY) ...
WITH test_return_geography_table_1() AS PROCEDURE RETURNS TABLE(g GEOGRAPHY) ... CALL test_return_geography_table_1();
Si vous tentez de spécifier GEOGRAPHY comme type de colonne, l’appel de la procédure stockée entraîne une erreur :
Stored procedure execution error: data type of returned table does not match expected returned table type
Pour contourner ce problème, vous pouvez omettre les arguments et les types de colonne dans
RETURNS TABLE()
.CREATE OR REPLACE PROCEDURE test_return_geography_table_1() RETURNS TABLE() ...
WITH test_return_geography_table_1() AS PROCEDURE RETURNS TABLE() ... CALL test_return_geography_table_1();
AS nested_procedure_definition
Définit le code exécuté par la procédure stockée imbriquée. La définition peut consister en n’importe quel code valide.
Syntaxe de déclaration des exceptions¶
Utilisez la syntaxe suivante pour déclarer une exception :
<exception_name> EXCEPTION [ ( <exception_number> , '<exception_message>' ) ] ;
Où :
exception_name
Le nom à donner à l’exception.
exception_number
Un numéro pour identifier de façon unique l’exception. Le nombre doit être un entier compris entre -20000 et -20999. Le numéro ne doit pas être utilisé pour une autre exception qui existe en même temps.
Par défaut : -20000
exception_message
Un message pour décrire l’exception. Le message ne doit pas contenir de caractères guillemets doubles.
Valeur par défaut : chaîne vide.
Par exemple :
exception_could_not_create_table EXCEPTION (-20003, 'ERROR: Could not create table.');
Pour plus d’informations sur les exceptions (y compris des exemples complets), voir Traitement des exceptions.
Exemples¶
Cet exemple déclare une variable nommée profit
pour l’utiliser dans un bloc anonyme Snowflake Scripting :
DECLARE
profit number(38, 2) DEFAULT 0.0;
BEGIN
LET cost number(38, 2) := 100.0;
LET revenue number(38, 2) DEFAULT 110.0;
profit := revenue - cost;
RETURN profit;
END;
Remarque : Si vous utilisez Snowflake CLI, SnowSQL, Classic Console, ou la méthode execute_stream
ou execute_string
dans le code Connecteur Python, utilisez cet exemple à la place (voir Utilisation de Snowflake Scripting dans Snowflake CLI, SnowSQL, le Classic Console et le connecteur Python) :
EXECUTE IMMEDIATE
$$
DECLARE
profit number(38, 2) DEFAULT 0.0;
BEGIN
LET cost number(38, 2) := 100.0;
LET revenue number(38, 2) DEFAULT 110.0;
profit := revenue - cost;
RETURN profit;
END;
$$
;
Pour plus d’exemples relatifs à la déclaration de variables, aux curseurs, aux RESULTSETs et aux exceptions, voir les chapitres suivants :