Procedimentos armazenados e UDTFs: nomes de argumento respeitados em chamadas¶
Atenção
Essa mudança de comportamento está no pacote 2023_03.
Para saber o status atual do pacote, consulte Histórico do pacote.
Em chamadas para procedimentos armazenados e funções de tabela definidas pelo usuário (UDTFs), onde a chamada inclui argumentos nomeados, o Snowflake dará precedência aos nomes dos argumentos sobre a posição do argumento, conforme a seguir.
- Anteriormente:
Ao chamar procedimentos ou funções de tabela definidas pelo usuário (UDTFs) que tenham argumentos nomeados, o Snowflake ignorará os nomes dos argumentos e usará a posição do argumento para determinar qual valor é passado para o procedimento ou função.
- Atualmente:
Os nomes dos argumentos terão precedência sobre a posição do argumento em chamadas para procedimentos e UDTFs. Isso pode resultar no seguinte comportamento diferente de antes da mudança de comportamento:
Uma chamada em funcionamento anterior para um procedimento armazenado ou função de tabela definida pelo usuário pode resultar em um erro.
Os nomes dos argumentos podem fazer com que os argumentos sejam passados em uma ordem diferente da anterior. Isso pode resultar em erro, resultados errados ou inserção de dados errados.
Os nomes dos argumentos podem fazer com que um procedimento armazenado diferente com o mesmo nome seja chamado. Isso pode resultar em erro, resultados errados ou inserção de dados errados.
O exemplo a seguir ilustra como as chamadas para dois procedimentos armazenados podem diferir antes e depois da alteração.
O exemplo a seguir ilustra como as chamadas para dois procedimentos armazenados podem diferir antes e depois da alteração.
-- 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'.
Ref: 1017