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)
  ...
Copy
CREATE PROCEDURE my_procedure(boolean_argument BOOLEAN, date_argument DATE)
  ...
Copy

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) { ... }
Copy

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

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:

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'
  )
  ...
Copy
CREATE OR REPLACE PROCEDURE build_string_proc(
    word VARCHAR,
    prefix VARCHAR DEFAULT 'pre-',
    suffix VARCHAR DEFAULT '-post'
  )
  ...
Copy

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())
  ...
Copy

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

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()
  ...
Copy

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

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

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

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: