定义 UDFs 和存储过程的实参¶
在为定义函数或过程而执行的 CREATE FUNCTION 或 CREATE PROCEDURE 中,指定可以传入的实参。例如:
调用函数或过程时,实参值绑定到处理程序的实参。它们可能基于匹配的名称或实参位置进行绑定,具体取决于用于处理程序的语言。
本主题提供有关指定函数或过程的实参的指南。
输入实参数量的限制¶
标量函数 (UDFs) 最多有 500 个输入实参。
指定实参的数据类型¶
选择与处理程序代码中使用的实参的数据类型对应的 SQL 数据类型。
有关 Snowflake 如何将 SQL 数据类型映射到处理程序数据类型的信息,请参阅 SQL 与处理程序语言之间的数据类型映射。
省略 Java、Python 和 Scala 过程的 Session 实参¶
在用 Java、Python 或 Scala 编写的过程的 CREATE PROCEDURE 语句中,不要定义 Snowpark Session 对象的实参。
例如,假设处理程序代码传入一个 Session 对象和一个 String 对象:
在 CREATE PROCEDURE 语句中,不要定义 Session 对象的实参。相反,只需为输入字符串定义一个实参:
Session 是调用过程时未指定的隐式实参。运行时,当调用存储过程时,Snowflake 创建一个 Session 对象并将其传递给存储过程。
指定可选实参¶
可以指定实参是可选的。有关详细信息,请参阅接下来的部分:
将实参指定为可选的¶
如果希望实参是可选的,请使用 DEFAULT 关键字指定实参的默认值。例如:
对于实参的默认值,可以使用表达式。例如:
必须在必需实参(如果有)之后指定可选实参。不能在必需实参之前指定可选实参。
使用可选实参重载函数和过程¶
如果要 重载 函数或过程,则不能使用可选实参来区分不同的签名。例如,假设创建不传入任何实参的以下 UDF:
如果试图创建与可选实参中传递的名称相同的 UDF,CREATE FUNCTION 语句将失败:
再举一个例子,假设创建了一个传入必需 INTEGER 实参的 UDF :
如果试图创建一个同名的 UDF,并传入一个必需的 INTEGER 实参和一个可选实参,则 CREATE FUNCTION 语句将失败:
这也会影响使用 ALTER FUNCTION ...RENAME 或 ALTER PROCEDURE ...RENAME 来重命名函数或过程的情况。如果要重命名函数或过程,则不能有具有相同名称和签名的现有函数。可选实参不会将一个签名与另一个签名区分开来。
例如,假设创建了一个名为 abc_udf 的 UDF,它传入了一个必需的 INTEGER 实参:
假设创建了一个具有不同名称 (def_udf) 的 UDF,它传入了一个必需的 INTEGER 实参和一个可选实参:
如果试图将 def_udf 的名称更改为 abc_udf,则会出现错误,因为已经有一个 UDF 具有相同的名称和相同类型的必需实参:
调用具有可选实参的函数和过程¶
若要调用具有可选实参的函数和过程,请参阅: