Definição de argumentos para UDFs e procedimentos armazenados¶
No CREATE FUNCTION ou CREATE PROCEDURE executado para definir uma função ou procedimento, você especifica argumentos que podem ser transmitidos. Por exemplo:
CREATE FUNCTION my_function(integer_argument INT, varchar_argument VARCHAR)
...
CREATE PROCEDURE my_procedure(boolean_argument BOOLEAN, date_argument DATE)
...
Quando você chama uma função ou procedimento, os valores dos argumentos são vinculados aos argumentos do manipulador. Eles podem ser vinculados com base em nomes correspondentes ou por posição de argumento, dependendo da linguagem que você estiver usando para o manipulador.
Este tópico fornece diretrizes sobre como especificar os argumentos para uma função ou procedimento.
Limites no número de argumentos de entrada¶
Funções escalares (UDFs) têm um limite de 500 argumentos de entrada.
Especifique os tipos de dados para os argumentos¶
Escolha o tipo de dados SQL que corresponde ao tipo de dados do argumento que você está usando no código do manipulador.
Para obter mais informações sobre como o Snowflake mapeia tipos de dados SQL para os tipos de dados do manipulador, consulte Mapeamentos de tipos de dados entre linguagens do manipulador e SQL.
Omissão do argumento Session
para procedimentos Java, Python e Scala¶
Na instrução CREATE PROCEDURE para um procedimento escrito em Java, Python ou Scala, não defina o argumento para o objeto Snowpark Session
.
Por exemplo, suponha que o código do manipulador transmita um objeto Session
e um objeto String
:
public String queryTable(Session session, String tableName) { ... }
Na instrução CREATE PROCEDURE, não defina um argumento para o objeto Session
. Em vez disso, apenas defina um argumento para a cadeia de caracteres de entrada:
CREATE OR REPLACE PROCEDURE query_table(table_name VARCHAR)
...
Session
é um argumento implícito que você não especifica ao chamar o procedimento. No tempo de execução, quando você chama seu procedimento armazenado, o Snowflake cria um objeto Session
e o passa para seu procedimento armazenado.
Especificação de argumentos opcionais¶
Você pode especificar que um argumento é opcional. Para obter mais detalhes, consulte as próximas seções:
Sobrecarga de funções e procedimentos com argumentos opcionais
Chamada de funções e procedimentos que possuem argumentos opcionais
Designação de um argumento como opcional¶
Se você quiser que um argumento seja opcional, use a palavra-chave DEFAULT para especificar o valor padrão do argumento. Por exemplo:
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'
)
...
Para o valor padrão do argumento, você pode usar uma expressão. Por exemplo:
CREATE OR REPLACE FUNCTION my_date_udf(optional_date_arg DATE DEFAULT CURRENT_DATE())
...
Você deve especificar argumentos opcionais após os argumentos obrigatórios (se houver). Você não pode especificar um argumento opcional antes de um argumento obrigatório.
-- This is not allowed.
CREATE FUNCTION wrong_order(optional_argument INTEGER DEFAULT 0, required_argument INTEGER)
...
Sobrecarga de funções e procedimentos com argumentos opcionais¶
Se você estiver sobrecarregando uma função ou procedimento, não poderá usar um argumento opcional para distinguir entre diferentes assinaturas. Por exemplo, suponha que você crie a seguinte UDF que não passa argumentos:
CREATE FUNCTION my_udf_a()
...
Se você tentar criar uma UDF com o mesmo nome que passe um argumento opcional, a instrução CREATE FUNCTION falhará:
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.
Como outro exemplo, suponha que você crie uma UDF que passe um argumento INTEGER obrigatório:
CREATE FUNCTION my_udf_b(required_arg INTEGER)
...
Se você tentar criar uma UDF com o mesmo nome que passa um argumento INTEGER obrigatório e um argumento opcional, a instrução CREATE FUNCTION falhará:
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.
Isso também afeta os casos em que você usa ALTER FUNCTION… RENAME ou ALTER PROCEDURE… RENAME para renomear uma função ou procedimento. Se você deseja renomear uma função ou procedimento, não pode haver uma função existente com o mesmo nome e assinatura. Argumentos opcionais não distinguem uma assinatura de outra.
Por exemplo, suponha que você crie uma UDF chamada abc_udf
que passe um argumento INTEGER obrigatório:
CREATE FUNCTION abc_udf(required_arg INTEGER)
...
Suponha que você crie uma UDF com um nome diferente (def_udf
) que passe um argumento INTEGER obrigatório e um argumento opcional:
CREATE FUNCTION def_udf(required_arg INTEGER, optional_arg INTEGER DEFAULT 0)
...
Se você tentar alterar o nome de def_udf
para abc_udf
, ocorrerá um erro porque já existe uma UDF com o mesmo nome e os mesmos tipos de argumentos obrigatórios:
000949 (42723): SQL compilation error:
Cannot overload FUNCTION 'ABC_UDF' as it would cause ambiguous FUNCTION overloading.
Chamada de funções e procedimentos que possuem argumentos opcionais¶
Para chamar funções e procedimentos que possuem argumentos opcionais, consulte: