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

Each argument to a stored procedure can be a general expression:

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

An argument can be a subquery:

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

You can call only one stored procedure per CALL statement. For example, the following statement fails:

CALL proc1(1), proc2(2);                          -- Not allowed
Copy

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
Copy

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