CALL

Appelle une procédure stockée.

Voir aussi :

CREATE PROCEDURE, SHOW PROCEDURES

Syntaxe

CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
  [ INTO :<snowflake_scripting_variable> ]
Copy

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);
Copy

Chaque argument d’une procédure stockée peut être une expression générale :

CALL stproc1(2 * 5.14::FLOAT);
Copy

Un argument peut être une sous-requête :

CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
Copy

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
Copy

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
Copy

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);
Copy

Vous pouvez également spécifier les arguments par leur nom :

CALL sv_proc1(province => 'Manitoba', amount => 127.4);
Copy

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);
Copy

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;
Copy

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;
$$
;
Copy