UDF 및 저장 프로시저에 대한 인자 정의하기

함수나 프로시저를 정의하기 위해 실행하는 CREATE FUNCTION 또는 CREATE PROCEDURE 에서 전달할 수 있는 인자를 지정합니다. 예:

CREATE FUNCTION my_function(integer_argument INT, varchar_argument VARCHAR)
  ...
Copy
CREATE PROCEDURE my_procedure(boolean_argument BOOLEAN, date_argument DATE)
  ...
Copy

함수나 프로시저를 호출하면 인자 값이 처리기의 인자에 바인딩됩니다. 처리기에 사용 중인 언어에 따라 일치하는 이름 또는 인자 위치를 기준으로 바인딩될 수 있습니다.

이 항목에서는 함수 또는 프로시저에 대한 인자 지정에 관한 지침을 제공합니다.

입력 인자 수에 대한 제한

스칼라 함수(UDF)의 입력 인자는 500개로 제한됩니다.

인자의 데이터 타입 지정하기

처리기 코드에서 사용 중인 인자의 데이터 타입에 해당하는 SQL 데이터 타입을 선택합니다.

Snowflake가 SQL 데이터 타입을 처리기 데이터 타입에 매핑하는 방법에 대한 자세한 내용은 SQL 및 처리기 언어 간의 데이터 타입 매핑 섹션을 참조하십시오.

Java, Python 및 Scala 프로시저의 경우 Session 인자를 생략합니다.

Java, Python 또는 Scala로 작성된 프로시저의 CREATE PROCEDURE 문에서는 Snowpark Session 오브젝트에 대한 인자를 정의하지 마십시오.

예를 들어 처리기 코드가 Session 오브젝트와 String 오브젝트를 전달한다고 가정하겠습니다.

public String queryTable(Session session, String tableName) { ... }
Copy

CREATE PROCEDURE 문에서 Session 오브젝트에 대한 인자를 정의하지 마십시오. 대신 입력 문자열에 대한 인자를 정의하십시오.

CREATE OR REPLACE PROCEDURE query_table(table_name VARCHAR)
  ...
Copy

Session 은 프로시저를 호출할 때 지정하지 않는 암시적 인자입니다. 런타임에 저장 프로시저를 호출하면 Snowflake는 Session 오브젝트를 생성하여 저장 프로시저에 전달합니다.

선택적 인자 지정하기

인자가 선택 사항임을 지정할 수 있습니다. 자세한 내용은 다음 섹션을 참조하십시오.

인자를 선택 사항으로 지정하기

인자를 선택 사항으로 하려면 DEFAULT 키워드를 사용하여 인자의 기본값을 지정하십시오. 예:

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

인자의 기본값으로 식을 사용할 수 있습니다. 예:

CREATE OR REPLACE FUNCTION my_date_udf(optional_date_arg DATE DEFAULT CURRENT_DATE())
  ...
Copy

필수 인자(있는 경우) 뒤에 선택적 인자를 지정해야 합니다. 필수 인자 앞에는 선택적 인자를 지정할 수 없습니다.

-- This is not allowed.
CREATE FUNCTION wrong_order(optional_argument INTEGER DEFAULT 0, required_argument INTEGER)
  ...
Copy

선택적 인자를 사용하여 함수 및 프로시저 오버로드하기

함수나 프로시저를 오버로드 하는 경우 선택적 인자를 사용하여 서로 다른 서명을 구별할 수 없습니다. 예를 들어, 아무런 인자도 전달하지 않는 다음 UDF를 생성한다고 가정해 보겠습니다.

CREATE FUNCTION my_udf_a()
  ...
Copy

선택적 인자를 전달하는 동일한 이름의 UDF를 생성하려고 하면 CREATE FUNCTION 문이 실패합니다.

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.

또 다른 예로, 필수 INTEGER 인자를 전달하는 UDF를 생성한다고 가정해 보겠습니다.

CREATE FUNCTION my_udf_b(required_arg INTEGER)
  ...
Copy

필수 INTEGER 인자와 선택적 인자를 전달하는 동일한 이름의 UDF를 생성하려고 하면 CREATE FUNCTION 문이 실패합니다.

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.

이는 ALTER FUNCTION … RENAME 또는 ALTER PROCEDURE … RENAME 을 사용하여 함수나 프로시저의 이름을 바꾸는 경우에도 영향을 미칩니다. 함수나 프로시저의 이름을 바꾸려는 경우 동일한 이름과 서명을 가진 기존 함수가 있을 수 없습니다. 선택적 인자는 서로 다른 서명을 구분하지 않습니다.

예를 들어 필수 INTEGER 인자를 전달하는 abc_udf 라는 UDF를 생성한다고 가정해 보겠습니다.

CREATE FUNCTION abc_udf(required_arg INTEGER)
  ...
Copy

필수 INTEGER 인자와 선택적 인자를 전달하는 서로 다른 이름(def_udf)의 UDF를 생성한다고 가정해 보겠습니다.

CREATE FUNCTION def_udf(required_arg INTEGER, optional_arg INTEGER DEFAULT 0)
  ...
Copy

def_udf 의 이름을 abc_udf 로 변경하려고 하면 이름과 필수 인자 유형이 동일한 UDF가 이미 있어 오류가 발생합니다.

000949 (42723): SQL compilation error:
  Cannot overload FUNCTION 'ABC_UDF' as it would cause ambiguous FUNCTION overloading.

선택적 인자가 있는 함수 및 프로시저 호출하기

선택적 인자가 있는 함수와 프로시저를 호출하려면 다음을 참조하십시오.