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 を作成するとします。
INTEGER 必須引数とオプションの引数を渡す同じ名前の UDF を作成しようとすると、 CREATE FUNCTION ステートメントは失敗します。
これは、 ALTER FUNCTION ... RENAME または ALTER PROCEDURE ... RENAME を使用して関数やプロシージャの名前を変更する場合にも影響します。関数やプロシージャの名前を変更する場合は、同じ名前と署名を持つ既存の関数は存在できません。オプションの引数は、ある署名と別の署名を区別しません。
たとえば、 abc_udf という名前の UDF を作成し、 INTEGER 必須引数を渡すとします。
INTEGER 必須引数とオプション引数を渡す、別の名前(def_udf)の UDF を作成するとします。
def_udf の名前を abc_udf に変更しようとすると、同じ名前で同じ型の必須引数を持つ UDF がすでに存在するため、エラーが発生します。
オプションの引数を持つ関数やプロシージャの呼び出し¶
オプションの引数を持つ関数やプロシージャを呼び出すには、次をご参照ください。