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'.
Copy

Réf : 1017