Définition des arguments pour UDFs et les procédures stockées¶
Dans CREATE FUNCTION ou CREATE PROCEDURE que vous exécutez pour définir une fonction ou une procédure, vous spécifiez les arguments qui peuvent être transmis. Par exemple :
CREATE FUNCTION my_function(integer_argument INT, varchar_argument VARCHAR)
...
CREATE PROCEDURE my_procedure(boolean_argument BOOLEAN, date_argument DATE)
...
Lorsque vous appelez une fonction ou une procédure, les valeurs des arguments sont liées aux arguments du gestionnaire. Elles peuvent être liées en fonction des noms correspondants ou de la position de l’argument, selon le langage que vous utilisez pour le gestionnaire.
Cette rubrique fournit des indications sur la spécification des arguments d’une fonction ou d’une procédure.
Limitation du nombre d’arguments d’entrée¶
Les fonctions scalaires (UDFs) ont une limite de 500 arguments d’entrée.
Spécifiez les types de données pour les arguments¶
Choisissez le type de données SQL qui correspond au type de données de l’argument que vous utilisez dans le code du gestionnaire.
Pour plus d’informations sur la façon dont Snowflake fait correspondre les types de données SQL aux types de données des gestionnaires, voir Mappage des types de données entre SQL et les langages de traitement.
Omettez l’argument Session
pour les procédures Java, Python et Scala¶
Dans l’instruction CREATE PROCEDURE d’une procédure écrite en Java, Python ou Scala, ne définissez pas l’argument de l’objet Snowpark Session
.
Par exemple, supposons que le code de votre gestionnaire transmette un objet Session
et un objet String
:
public String queryTable(Session session, String tableName) { ... }
Dans l’instruction CREATE PROCEDURE, ne définissez pas d’argument pour l’objet Session
. Au lieu de cela, définissez simplement un argument pour la chaîne d’entrée :
CREATE OR REPLACE PROCEDURE query_table(table_name VARCHAR)
...
Session
est un argument implicite que vous ne spécifiez pas lors de l’appel de la procédure. Lorsque vous appelez votre procédure stockée, Snowflake crée un objet Session
et le transmet à votre procédure stockée.
Spécifiez des arguments facultatifs¶
Vous pouvez spécifier qu’un argument est facultatif. Voir les sections suivantes pour plus de détails :
Surcharge des fonctions et des procédures avec des arguments facultatifs
Appel de fonctions et de procédures ayant des arguments facultatifs
Désignation d’un argument comme facultatif¶
Si vous souhaitez qu’un argument soit facultatif, utilisez le mot-clé DEFAULT pour spécifier la valeur par défaut de l’argument. Par exemple :
CREATE OR REPLACE FUNCTION build_string_udf(
word VARCHAR,
prefix VARCHAR DEFAULT 'pre-',
suffix VARCHAR DEFAULT '-post'
)
...
CREATE OR REPLACE PROCEDURE build_string_proc(
word VARCHAR,
prefix VARCHAR DEFAULT 'pre-',
suffix VARCHAR DEFAULT '-post'
)
...
Pour la valeur par défaut de l’argument, vous pouvez utiliser une expression. Par exemple :
CREATE OR REPLACE FUNCTION my_date_udf(optional_date_arg DATE DEFAULT CURRENT_DATE())
...
Vous devez spécifier les arguments facultatifs après les arguments obligatoires (le cas échéant). Vous ne pouvez pas spécifier un argument facultatif avant un argument obligatoire.
-- This is not allowed.
CREATE FUNCTION wrong_order(optional_argument INTEGER DEFAULT 0, required_argument INTEGER)
...
Surcharge des fonctions et des procédures avec des arguments facultatifs¶
Si vous surchargez une fonction ou une procédure, vous ne pouvez pas utiliser d’argument facultatif pour distinguer les différentes signatures. Par exemple, supposons que vous créiez l’UDF suivant qui ne transmet aucun argument :
CREATE FUNCTION my_udf_a()
...
Si vous tentez de créer un UDF portant le même nom et contenant un argument facultatif, l’instruction CREATE FUNCTION échoue :
CREATE FUNCTION my_udf_a(optional_arg INTEGER DEFAULT 0)
...
000949 (42723): SQL compilation error:
Cannot overload FUNCTION 'MY_UDF_A' as it would cause ambiguous FUNCTION overloading.
Autre exemple : supposons que vous créiez un UDF qui transmet un argument INTEGER obligatoire :
CREATE FUNCTION my_udf_b(required_arg INTEGER)
...
Si vous tentez de créer un UDF portant le même nom et contenant un argument obligatoire INTEGER et un argument facultatif, l’instruction CREATE FUNCTION échoue :
CREATE FUNCTION my_udf_b(required_arg INTEGER, optional_arg INTEGER DEFAULT 0)
...
000949 (42723): SQL compilation error:
Cannot overload FUNCTION 'MY_UDF_B' as it would cause ambiguous FUNCTION overloading.
Cela concerne également les cas où vous utilisez ALTER FUNCTION… RENAME ou ALTER PROCEDURE… RENAME pour renommer une fonction ou une procédure. Si vous souhaitez renommer une fonction ou une procédure, il ne peut y avoir de fonction existante portant le même nom et la même signature. Les arguments facultatifs ne distinguent pas une signature d’une autre.
Par exemple, supposons que vous créiez un UDF nommé abc_udf
qui transmet un argument requis INTEGER:
CREATE FUNCTION abc_udf(required_arg INTEGER)
...
Supposons que vous créiez un UDF avec un nom différent (def_udf
) qui transmet un argument obligatoire INTEGER et un argument facultatif :
CREATE FUNCTION def_udf(required_arg INTEGER, optional_arg INTEGER DEFAULT 0)
...
Si vous tentez de changer le nom de def_udf
en abc_udf
, une erreur se produit car il existe déjà un UDF portant le même nom et ayant les mêmes types d’arguments requis :
000949 (42723): SQL compilation error:
Cannot overload FUNCTION 'ABC_UDF' as it would cause ambiguous FUNCTION overloading.
Appel de fonctions et de procédures ayant des arguments facultatifs¶
Pour appeler des fonctions et des procédures qui ont des arguments facultatifs, voir :