Procédures stockées et UDTFs : noms des arguments respectés dans les appels¶
Attention
Ce changement de comportement figure dans le bundle 2023_03.
Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.
Appels aux procédures stockées et aux fonctions de table définies par l’utilisateur (UDTFs), lorsque l’appel comprend des arguments nommés, Snowflake donnera la priorité aux noms des arguments sur la position des arguments comme suit.
- Précédemment:
Lorsque vous appelez des procédures ou des fonctions de table définies par l’utilisateur (UDTFs) qui ont des arguments nommés, Snowflake ignore les noms des arguments et utilise la position de l’argument pour déterminer quelle valeur est transmise à la procédure ou à la fonction.
- Actuellement:
Les noms des arguments auront la priorité sur la position des arguments dans les appels aux procédures et aux UDTFs. Il peut en résulter un comportement différent de celui d’avant le changement de comportement :
Un appel à une procédure stockée ou à une fonction de table définie par l’utilisateur, qui fonctionnait auparavant, peut entraîner une erreur.
Les noms d’arguments pouvaient entraîner la transmission d’arguments dans un ordre différent de celui qui prévalait auparavant. Cela pourrait entraîner une erreur, des résultats erronés ou l’insertion de données erronées.
Les noms des arguments peuvent entraîner l’appel d’une procédure stockée différente portant le même nom. Cela pourrait entraîner une erreur, des résultats erronés ou l’insertion de données erronées.
L’exemple suivant illustre les différences entre les appels à deux procédures stockées avant et après la modification.
L’exemple suivant illustre les différences entre les appels à deux procédures stockées avant et après la modification.
-- One stored procedure CREATE OR REPLACE PROCEDURE proc(STRARG1 varchar, STRARG2 varchar) RETURNS VARCHAR LANGUAGE SQL AS $$ BEGIN return 'hello'; END $$; -- Another procedure CREATE OR REPLACE PROCEDURE proc(ARG1 number, ARG2 number) RETURNS BOOLEAN LANGUAGE SQL AS $$ BEGIN return ARG1 < ARG2; END $$; -- Example A -- Before: returns 'hello' -- After: returns TRUE CALL PROC(ARG1 => '5', ARG2 => '100'); -- Example B -- Before: returns TRUE -- After: returns 'hello' CALL PROC(STRARG1 => 5, STRARG2 => 100); -- 'hello'.
Réf : 1017