CALL¶
Appelle une procédure stockée.
- Voir aussi :
Syntaxe¶
CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Paramètres requis¶
procedure_name ( [ [ arg_name => ] arg , ... ] )
Spécifie l’identificateur (
procedure_name
) pour la procédure à appeler et pour tout argument d’entrée.Vous pouvez spécifier les arguments d’entrée soit par leur nom (
arg_name => arg
) , soit par leur position (arg
).Remarques :
Vous devez spécifier tous les arguments soit par leur nom, soit par leur position. Vous ne pouvez pas spécifier certains arguments par leur nom et d’autres par leur position.
Lorsque vous spécifiez un argument par son nom, vous ne pouvez pas utiliser de guillemets doubles autour du nom de l’argument.
Si deux fonctions ou deux procédures ont le même nom, mais des types d’arguments différents, vous pouvez utiliser les noms des arguments pour spécifier la fonction ou la procédure à exécuter, si les noms des arguments sont différents. Reportez-vous à Surcharge de procédures et de fonctions.
Paramètres facultatifs¶
INTO :snowflake_scripting_variable
Définit la variable Exécution de scripts Snowflake spécifiée dans la valeur de retour de la procédure stockée.
Exemples¶
Pour des exemples plus détaillés de création et d’appel de procédures stockées, voir Travailler avec des procédures stockées.
CALL stproc1(5.14::FLOAT);
Each argument to a stored procedure can be a general expression:
CALL stproc1(2 * 5.14::FLOAT);
An argument can be a subquery:
CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
You can call only one stored procedure per CALL statement. For example, the following statement fails:
CALL proc1(1), proc2(2); -- Not allowed
Also, you cannot use a stored procedure CALL as part of an expression. For example, all the following statements fail:
CALL proc1(1) + proc1(2); -- Not allowed
CALL proc1(1) + 1; -- Not allowed
CALL proc1(proc2(x)); -- Not allowed
SELECT * FROM (call proc1(1)); -- Not allowed
However, inside a stored procedure, the stored procedure can call another stored procedure, or call itself recursively.
Prudence
Nested calls can exceed the maximum allowed stack depth, so be careful when nesting calls, especially when using recursion.
L’exemple suivant appelle une procédure stockée nommée sv_proc1
et transmet un littéral de chaîne et un nombre comme arguments d’entrée : L’exemple précise les arguments par position :
CALL sv_proc1('Manitoba', 127.4);
Vous pouvez également spécifier les arguments par leur nom :
CALL sv_proc1(province => 'Manitoba', amount => 127.4);
L’exemple suivant montre comment définir et transmettre une variable de session comme argument d’entrée dans une procédure stockée :
SET Variable1 = 49;
CALL sv_proc2($Variable1);
Voici un exemple de bloc Exécution de scripts Snowflake qui capture la valeur de retour d’une procédure stockée dans une variable Exécution de scripts Snowflake.
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
Remarque : si vous utilisez SnowSQL, Classic Console, ou la méthode execute_stream
ou execute_string
dans le code Python Connector, utilisez cet exemple à la place (voir Utilisation d’Exécution de scripts Snowflake dans SnowSQL, Classic Console, et le connecteur Python) :
EXECUTE IMMEDIATE $$
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;