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);
Chaque argument d’une procédure stockée peut être une expression générale :
CALL stproc1(2 * 5.14::FLOAT);
Un argument peut être une sous-requête :
CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
Vous ne pouvez appeler qu’une procédure stockée par instruction CALL. Par exemple, l’instruction suivante échoue :
CALL proc1(1), proc2(2); -- Not allowed
En outre, vous ne pouvez pas utiliser une procédure stockée CALL dans le cadre d’une expression. Par exemple, toutes les instructions suivantes échouent :
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
Toutefois, dans une procédure stockée, la procédure stockée peut appeler une autre procédure stockée ou s’appeler elle-même de manière récursive.
Prudence
Les appels imbriqués peuvent dépasser la profondeur de pile maximale autorisée. Soyez donc prudent lors de l’imbrication des appels, en particulier lors de l’utilisation de la récursivité.
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 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
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;