17.10 - CREATE FUNCTIONおよびREPLACE FUNCTION構文要素(SQL形式) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-171K-JPN
Language
日本語 (日本)
database_name_1
user_name_1
デフォルト以外のデータベースまたはユーザーで関数を作成または置換する場合に指定する、オプションのデータベース名またはユーザー名。
SYSLIBデータベースをUDFの格納先として使用する場合は、その永久領域のサイズを変更し、それに対して適切な権限を付与する必要があります。これは、そのデータベースが永久領域0、アクセス権限なしで作成されているためです。
ユーザーには、そのユーザーが実行するすべてのUDF、またはその関数を格納しているデータベースに対するEXECUTE FUNCTION権限が必要です。
データベース名を指定しない場合、システムは現行データベース内で関数を作成または置換します。
function_name
SQL関数の呼び出し名。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
この句はすべてのUDFで必須です。
function_nameを使用して関数を識別する場合は、その関数が作成されたプログラミング言語の識別子命名ルールに従うように気をつけてください。
名前を二重引用符で囲まない限り、既存のVantage提供の関数(固有関数とも呼ばれる)と同じ名前をUDFに指定することはできません。 例えば、“TRIM”()などです。 UDFに固有関数の名前を指定することは、望ましくないプログラミング手法なので避けてください。
UDTと、パラメータなしでSYSUDTLIBに格納されているUDFは、同じ名前を持つことができません。
同じクラス内で同じfunction_nameを持つ別々の関数の識別には、パラメータのデータ型とパラメータの数が使用されます。
parameter_name
SQL関数に渡す変数の、UDTを含む括弧に入れたカンマ区切りのデータ型、およびパラメータ名のリスト。同じ名前の複数の関数を区別するためにデータ型が必要になります。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
SQL UDFが受け入れる最大パラメータ数は128です。
関数に渡すパラメータがない場合でも、右括弧と左括弧を指定する必要があります。
パラメータ名はSQL UDF定義内で固有でなければなりません。
パラメータ名を1つ指定する場合は、関数に渡すすべてのパラメータの名前を指定する必要があります。
parameter_data_type
各パラメータに関連付けられたデータ型は、パラメータまたは戻り値の型です。VARIANT_TYPEとTD_ANYTYPEを除くVantageのすべてのデータ型が有効です。文字データは、CHARACTER SET句も指定できます。
パラメータにCHARACTER SETを指定できますが、SQL UDF引数の呼び出し側のCHARACTER SETは、VantageがSQL UDFの処理に使用するCHARACTER SETです。
文字サーバー データ セットとしてKANJI1を指定することはできません。指定した場合、Vantageはリクエスト元にエラーを返します。
BYTE、CHARACTER、DECIMAL、VARCHARなど、長さやサイズを指定するデータ型では、パラメータのサイズが、渡すことのできる最大バイト数になります。
return_data_type
SQL関数によって返される値のデータ型。
この句はすべてのSQL UDFで必須です。
文字サーバー データ セットとしてKANJI1を指定することはできません。指定した場合、Vantageはリクエスト元にエラーを返します。
SQL UDFでRETURNSのデータ型としてTD_ANYTYPEを指定することはできません。
関数は、適切なデータ型のデータを返す必要があります。
結果型には、名前RETURN0[n]の下のDBC.TVFieldsにディクショナリ項目があります。nは、各値を固有にしてユーザー定義パラメータ名が重複しないようにするために、RETURN0行に付加される一連の数字です。nの値は、パラメータ名が重複しなくなるまで増分されます。
RETURN0のパラメータ名が存在しない場合、nの添え字は使用されません。
language_clause
SQL関数の記述に使用するプログラミング言語を表わすコード。
SQL UDFを記述するための有効な言語はSQLだけなので、LANGUAGE SQLを指定するか、そうでなければ何も指定しないようにしなければなりません。
デフォルト値は、LANGUAGE SQLです。
SQL_data_access
SQL関数の本体がデータベースにアクセスするか、またはSQL文を含んでいるか。
これはすべてのSQL UDFの必須属性であり、CONTAINS SQLとして指定する必要があります。
database_name_2
user_name_2
特定関数のオプションのデータベースまたはユーザー名。
specific_function_name
関数の特定の名前。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
とは異なりfunction_name、SQL関数、メソッド、またはUDTの特定名は名前の重複を回避するためにそのデータベース内で固有でなければなりません。この名前はUDFデータベース オブジェクトの名前として、DBC.TVMに保存されます。
この句はオーバーロードされたfunction_nameでは必須ですが、その他の場合はオプションであり、SQL関数定義ごとに1回だけ指定できます。
DETERMINISTIC
関数は同一の入力に対して同一の結果を返します。
DETERMINISTICは、関数定義ごとに1回のみ指定できます。
NOT DETERMINISTIC
関数が同一の入力に対して同一の結果を返すとは限りません。
例えば、SQL関数が処理の一部として乱数生成機能を呼び出す場合、SQL関数呼び出しの結果は呼び出す前に判明しないので、その関数はNOT DETERMINISTICになります。
NOT DETERMINISTICは、関数定義ごとに1回のみ指定できます。
デフォルト値はNOT DETERMINISTICです。
CALLED ON NULL INPUT
関数の呼び出し時にパラメータがNULLであってもなくても、SQL関数を常に評価するように指定します。
この句はオプションであり、SQL関数定義ごとに1回だけ指定できます。
デフォルト値はCALLED ON NULL INPUTです。
RETURNS NULL ON NULL INPUT
関数の呼び出し時にいずれかのパラメータがNULLの場合は、関数を評価せずにNULLの結果が返されます。
この句はオプションであり、SQL関数定義ごとに1回だけ指定できます。
デフォルト値はCALLED ON NULL INPUTです。
SQL SECURITY DEFINER
関数の呼び出し時に参照するオブジェクトに対する関数の作成者および所有者の権限を、Vantageが検証します。
直接所有者または直接作成者のいずれかが、データベース オブジェクトにアクセスするために必要な、UDF定義内で指定された権限を関数の呼び出し時に持っていない場合、Vantageは要求元にエラーを返します。
権限の検証時に関数の所有者が存在しない場合、Vantageは要求元にエラーを返します。
SQL SECURITY DEFINERがSQL UDFのデフォルトであり、唯一の有効なエントリです。
この句は、LANGUAGE SQLも指定する場合にのみ指定できます。
COLLATION INVOKER
関数が、作成者のデフォルトの照合を使用するのではなく、呼び出し元のセッションのデフォルトの照合設定を使用します。
この句は必須です。
INLINE TYPE 1
独立した関数としてではなく、関数がSQLリクエストからインラインで実行されます。
この句は必須です。
TYPE 1オプションは、SQL UDFの実行動作がシステムの環境設定に基づいていることを示します。別の設定のシステムでは異なる結果が生成される可能性があります。
インライン オプションを使用してSQL UDFが作成される場合は、関数が作成されたときに作成者にとって有効であった環境と、関数が呼び出されたときに呼び出し側にとって有効であった環境に応じて、そのUDFがどのように機能するかを作成時に指定することができます。この2つの環境が異なる場合は、関数呼び出しの結果も異なることがあります。
return_expression
SQL UDFが実行するSQL文。
RETURN式のデータ型としてFORMAT属性を指定することはできません。
サポートされている唯一のSQLプロシージャ文はRETURNです。 RETURN文を参照してください。