- database_name_1
- user_name_1
- デフォルト以外のデータベースまたはユーザーで関数を作成または置換する場合に指定する、オプションのデータベース名またはユーザー名。
- 推奨されているSYSLIBデータベースをUDFの格納先として使用する場合は、その永久領域のサイズを変更し、それに対して適切な権限を付与する必要があります。これは、そのデータベースが永久領域0、アクセス権限なしで作成されているためです。<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>を参照してください。
- ユーザーには、SYSLIBから実行するすべてのUDFに対するEXECUTE FUNCTION権限が必要です。
- データベース名を指定しない場合、システムは現行データベースまたはユーザー内で関数を作成または置換します。
- function_name
- 関数の呼び出し名。
- データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
- これはすべてのテーブルUDFの必須属性です。
- function_nameを使用して関数を識別する場合は、その関数が作成されたプログラミング言語の識別子命名ルールに従うように気をつけてください。
- 名前を二重引用符で囲まない限り、既存のVantage提供の関数(固有関数とも呼ばれる)と同じ名前をテーブルUDFに指定することはできません。 例えば、“TRIM”()などです。 UDFに固有関数の名前を指定することは、望ましくないプログラミング手法なので避けてください。
- UDTと、パラメータなしでSYSUDTLIBに格納されているテーブルUDFは、同じ名前を持つことができません。
データベースのUDFライブラリに、名前にマルチバイト文字が存在するオブジェクトが含まれている場合、新規オブジェクト名に1バイト文字のみが含まれる場合でも、1バイト セッション文字セットを使用して、新たなUDF、UDT、メソッド、あるいはJavaストアド プロシージャ オブジェクトを作成することはできません。そうでない場合、Vantageは、要求元にエラーを返し、代わりにマルチバイト セッション文字セットを使用します。
- specific_function_nameまたはexternal_function_nameを指定しない場合、function_nameはC、C++、またはJava関数名のスペルと文字の大小に正確に一致している必要があります。同じ注意はJavaテーブル関数用のJava言語の命名ルールにも当てはまります。このルールは関数の定義時だけに当てはまることであり、呼び出し時には当てはまりません。
- SQLは同じ関数クラス内の関数名オーバーロードをサポートしているので、function_nameはクラス内で固有である必要はありません。ただし、同じデータベースまたはユーザー内のスカラー関数と集約関数とに同じ名前を指定することはできません。
- 同じクラス内で同じfunction_nameを持つ別々の関数の識別には、パラメータのデータ型とパラメータの数が使用されます。
- 関数オーバーロードの詳細については、<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。
- parameter_name
- パラメータ名はテーブルUDF定義内で固有でなければなりません。
- UDFが受け入れる最大パラメータ数は128です。
- 関数に渡すパラメータがない場合でも、右括弧と左括弧を指定する必要があります。
- data_type
- Vantageでは、テーブル関数の入力パラメータでシステム定義のパラメータ型VARIANT_TYPEを使用できます。
- テーブル関数の入力パラメータでシステム定義のパラメータ型VARIANT_TYPEを指定するときのルールと制限事項を以下にまとめます。
- CまたはC++で記述されている外部ルーチンの格納先パラメータのデータ型としてVARIANT_TYPEを指定できます。
- Javaで記述されている外部ルーチンの格納先パラメータのデータ型としてVARIANT_TYPEを指定することはできません。
- UDFでは、最大で128個のパラメータを使用できますが、各VARIANT_TYPE入力パラメータでさらに128個のパラメータに対応できます。最大で8個のUDF入力パラメータをVARIANT_TYPEデータ型として宣言できるので、最大数のVARIANT_TYPEパラメータを指定した場合にVantageで実際に使用できるUDF入力パラメータの数は1,144個になります。
- テーブル関数のどのパラメータでも、データ型としてTD_ANYTYPEを指定できます。システム定義のデータ型TD_ANYTYPEでは、あらゆるシステム定義のデータ型を使用できます。その属性は、関数の実行時に決定されます。
- TD_ANYTYPEパラメータ データ型の詳細は、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。TD_ANYTYPEのメリットを生かしたCルーチンとC++ルーチンのコーディング方法の詳細は、<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。
- 入力または結果パラメータにシステム定義のパラメータ型TD_ANYTYPEを指定するときのルールと制限事項を次に示します。
- C、C++、またはJavaで記述されているスカラー関数、集約関数またはテーブル関数の入力パラメータのデータ型として、TD_ANYTYPEを指定できます。
- C、C++、またはJavaで記述されているスカラー関数または集約関数の結果パラメータのデータ型として、TD_ANYTYPEを指定できます。
- テーブル関数の結果パラメータのデータ型として、TD_ANYTYPEを指定することはcannot。
- 文字サーバー データ セットとしてKANJI1を指定することはできません。指定した場合、Vantageはリクエスト元にエラーを返します。
- パラメータ データ型BLOBおよびCLOBは、必ずロケータで表わします。逆に、RETURN TABLE句のLOB列データ型はロケータで表わしてはなりません。ロケータの説明については、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>で、USINGリクエスト修飾子についての詳細情報を参照してください。
- Vantageではメモリ内LOBパラメータはサポートされません。LOBパラメータごとに、AS LOCATOR句を指定する必要があります。
- ただし、データ型変換を必要とするLOBをテーブルUDFに渡すときには、変換を行なうために常にLOBを実体化する必要があります。
- パラメータ名を1つ指定する場合は、関数に渡すすべてのパラメータの名前を指定する必要があります。
- パラメータ名を指定しない場合、システムはP1、P2、…、Pnの形式でパラメータに固有名を割り当てます。 これらの名前はCOMMENT文で使用され、HELP FUNCTION文で生成されるレポートに表示され、エラー メッセージのテキストに表示されます。 COMMENT(コメント配置形式)とHELP ONLINEを参照してください。
- 各パラメータに関連したデータ型は、パラメータまたは戻り値の型です。すべてのVantageのデータ型は有効です。文字データは、CHARACTER SET句も指定できます。
- BYTE、CHARACTER、DECIMAL、VARCHARなど、長さやサイズを指定するデータ型では、パラメータのサイズが、渡すことのできる最大バイト数になります。
- column_name
- 関数によって返される行セット内の列の名前。どのテーブル関数定義でも、少なくとも1つの列とそのデータ型を定義する必要があります。
- データベース オブジェクトの命名ルールについては、<SQL基礎>を参照してください。
- 1つのテーブル関数に最大で2,048個の列を指定できます。
- 指定した列の1つがLOBデータ型の場合、他に少なくとも1つの非LOB列を定義する必要があります。
- 列名の完全セットとそれに伴うデータ型は、関数が呼び出されたときに呼び出し側に戻すテーブルの構造を定義します。
- column_data_type
- 指定する各列名のデータ型。データ型のリストについては、データ型構文を参照してください。
- データ型がCHARACTERファミリーのいずれかの場合は、CHARACTER SET属性も指定できます。
- RETURNS句のデータ型としてTD_ANYTYPEを指定することはできません。
- 文字サーバー データ セットとしてKANJI1を指定することはできません。指定した場合、Vantageはリクエスト元にエラーを返します。
- 返される列のデータ型がBLOBまたはCLOBのいずれかの場合は、AS LOCATOR句で指定することはできません。そのように指定すると、要求元にエラーが返されます。
- これは、AS LOCATOR句で指定しなければならないLOBパラメータのデータ型の指定とは正反対です。
- 列に対してそのデータ型以外の属性を指定したり、文字データ型に対してCHARACTER SET句を指定することはできません。
- maximum_output_columns
- 呼び出しの前には、関数によって返される出力列の数が不明なため、maximum_output_columns列の最大数に制限します。
- 上限は、1つのテーブル関数につき2,048列です。
- デフォルト値はありません。
- database_name_2
- user_name_2
- 任意指定のデータベースまたはユーザーの指定。
- function_name
- 1つのテーブルまたはテーブルの式を入力として受け取り、1つのテーブルを生成します。
- 明示的な関数名の指定はオプションです。
- language_clause
- 外部関数の記述に使用するプログラミング言語を表わすコード。
コード |
意味 |
C |
外部関数がオブジェクト形式の場合も、外部関数はCで記述されます。 |
CPP |
外部関数がオブジェクト形式の場合も、外部関数はC++で記述されます。 |
JAVA |
外部関数は、Javaで記述されます。 |
SAS |
外部関数は、SQLTABLEパラメータ形式を使用する必要があるSASで記述されています。 |
- これはすべてのUDFの必須属性です。
- 外部UDFの作成に有効な言語はC、C++、およびJavaです。
- 外部関数オブジェクトがC、C++、またはJavaで作成されていない場合は、そのオブジェクトがC、C++、またはJavaオブジェクト コード互換である必要があります。
- Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184を参照してください。
- SQL_data_access
- 外部関数本体がデータベースにアクセスするか、またはSQL文を含んでいるかを指定します。
- この句はすべてのテーブルUDFで必須であり、NO SQLとして指定する必要があります。
function_attribute
- database_name_3
- user_name_3
- オプションのデータベースまたはユーザー名。
- specific_function_name
- 関数の特定の名前。
データベースのUDFライブラリに、名前にマルチバイト文字が存在するオブジェクトが含まれている場合、新規オブジェクト名に1バイト文字のみが含まれる場合でも、1バイト セッション文字セットを使用して、新たなUDF、UDT、メソッド、あるいはJavaストアド プロシージャ オブジェクトを作成することはできません。そうでない場合、Vantageは、要求元にエラーを返し、代わりにマルチバイト セッション文字セットを使用します。
- データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
- この句はオーバーロード関数の名前では必須ですが、その他の場合は任意指定であり、関数定義ごとに1回だけ指定できます。
- specific_function_nameを使用してCまたはC++関数名を識別する場合は、C言語またはC++言語の識別子命名規則に従ってください。Java関数用のJava言語の命名規則についても同様です。
- specific_function_nameはfunction_nameとは異なり、名前の重複を回避するために、データベースまたはユーザー内で固有でなければなりません。
- この名前はDBC.TVMに、UDFデータベース オブジェクトの名前として保存されます。
- PARAMETER STYLE
- テーブル関数にパラメータを渡すときに使用するパラメータの受け渡し表記。
- 指定するパラメータ形式は、外部関数のパラメータを渡すための表記と一致していなければなりません。
- この句は、SQLテーブル関数に対してオプションで、関数定義ごとに1回だけ指定できます。この句は、Javaテーブル関数に対して必須です。
- この時点でパラメータ形式を指定しない場合は、パラメータ形式を外部本体の参照と共に指定できます。
- 同じCREATE/REPLACE FUNCTIONリクエストで複数のパラメータ形式を指定することはできません。
- テーブル関数を使用して、行レベル セキュリティをセキュリティ制約に適用することはできません。
- UDFパラメータ形式の詳細については、<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>を参照してください。
- SQL
- 標識変数を使用して引数を渡します。
- その結果、NULLを入力として渡して結果として返すことが常に可能になります。
- SQLがデフォルトのパラメータ形式です。
- JAVA
- すべてのJavaテーブル関数で必須です。
- Java関数がNULL引数を受け入れる必要がある場合、EXTERNAL NAME句にはパラメータのリストを含め、Javaオブジェクトにマップするデータ型を指定する必要があります。
- DETERMINISTIC
- 関数が同一の入力に対して同一の結果を返すかどうかを指定します。
- この句は任意指定であり、関数定義ごとに1回だけ指定できます。
- NOT DETERMINISTIC
- 例えば、関数が処理の一部として乱数生成機能を呼び出す場合、関数呼び出しの結果は呼び出す前に判明しないので、その関数はNOT DETERMINISTICになります。
- デフォルト値はNOT DETERMINISTICです。
- CALLED ON NULL INPUT
- 関数の呼び出し時にパラメータがNULLであってもなくても、関数を常に評価します。
- この句は任意指定であり、関数定義ごとに1回だけ指定できます。
- GLOP_set_name
- このテーブル関数が関連付けられたGLOPセットの名前。
- データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
- 指定したGLOPセットは、テーブル関数を作成している時点で存在している必要はありません。
- この句は、RETURNS句とEXTERNAL句の間の任意の場所に指定できます。
- EXTERNAL
- 外部関数本体の参照句を示します。
- この句はすべてのテーブルUDFで必須です。
- この句によって、以下の4種類の指定ができます。
- キーワードEXTERNALのみ。
- キーワードEXTERNAL NAMEおよび外部関数名(オプションのパラメータ形式の指定あり)。
これはすべてのUDFの必須属性です。
- キーワードEXTERNAL NAMEおよび外部文字列リテラルのセット。
- キーワードEXTERNAL NAMEおよびJava JAR IDの指定。
- external_function_name
- 関数オブジェクトのエントリ ポイント。最大30文字。
- データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
- 文字の大小は有意であり、C、C++、またはJava関数名と一致していなければなりません。
- external_string_literal
- テーブル関数の作成に必要なソース コンポーネントとオブジェクト コンポーネントの格納場所を指定する文字列。
- 詳細については、<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>を参照してください。
code_specification
単一の文字コード。シーケンス内の最初のコードに応じて、この文字列では、UDFのテーブル関数オブジェクト名、エンコード名、またはテーブル関数の作成に必要なコンポーネントのパスを指定します。
- F
- 関数オブジェクト。後続の文字列は、CまたはC++のテーブル関数オブジェクトのエントリ ポイント名です。
F!function_entry_point_name
- C
- クライアント。テーブル関数のソース コードまたはオブジェクト コードは、クライアントに格納されます。
- S
- サーバー。 テーブル関数のソース コードまたはオブジェクト コードは、サーバーに格納されます。
path_specification
次のリストに、外部テーブル関数のパス指定を示します。オプションは、パッケージ オプションを除いて必要に応じて何度でも繰り返すことができます。外部文字列リテラルとして以下のファイル タイプを指定できます。
- I
- インクルード ファイル(.h)。
I!name_on_server!include_name
- L
- UDFで必要な非標準のライブラリ ファイルのライブラリ名。
L!library_name
- O
- オブジェクト ファイル。
O!name_on_server!object_name
- P
- パッケージ名。このパッケージ オプションは、FのC関数名オプションを除き、他のすべてのオプションとは併用できません。
P!package_name
- S
- ソース ファイル。
S!name_on_server!source_name
- NS
- ソース ファイルなし。ソース ファイルおよびインクルード ファイルは、関数テーブルに格納されません。このオプションは、新しい関数の作成でソース コードを処理する方法、および外部文字列リテラルに指定されたすべてのソース コードに適用する方法に影響を与えます。
NS!source_file!include_file
- delimiter
- 区切り文字(!など)を指定します。文字列の指定の全体で、同じ区切り記号を使用しなければなりません。
- name_on_server
- サーバー上のファイルに名前を付けます。インクルード ファイルには、Cソース内のinclude文で指定された名前と同じ名前(拡張子なし)が付いている必要があります。
- file_pathname
- ソース、インクルード ファイル、オブジェクト、またはライブラリの格納場所(パス)と名前。パッケージおよびライブラリをプリインストールする必要があるため、サーバー オプション(S)を使用する必要があります。パス指定では、関数がUnixプラットフォームまたはWindowsプラットフォームのいずれで作成されているかに関係なく、前方スラッシュ(/)または円記号(\)を使用できます。
JAR_ID_specification
次に示す変数は、Javaテーブル関数にのみ適用されます。
- JAR_ID
- この関数に関連付けられているJARファイルの登録名。
- java_class_name
- 実行するJavaメソッドを格納するJARに含まれるJavaクラスの名前。
- method_name
- UDFを実行するときに実行されるメソッドの名前。
- データベース オブジェクトの命名ルールについては、<SQL基礎>を参照してください。
java_parameter_class
- primitive
- 次のいずれかのプリミティブ パラメータ クラス。
- バイト
- double
- int
- long
- short
- object
- 次の形式のオブジェクト パラメータ クラス定義。
- java.pkg.class
- EXTERNAL SECURITY
- 外部セキュリティ句の前に指定するキーワード。
- この句はオペレーティング システムI/Oを実行する外部UDFで必須です。
- 外部セキュリティ句を指定しないのに、定義されているUDFがOS I/Oを実行する場合、そのI/Oの結果は予期不能です。最も考えられる結果はデータベースのクラッシュで、システム全体がクラッシュする場合もあります。
- 外部ルーチンの許可を作成する方法の詳細については、CREATE AUTHORIZATIONおよびREPLACE AUTHORIZATIONを参照してください。
- DEFINER
- UDFが関連するセキュリティ許可オブジェクトのクライアント ユーザー コンテキストで実行することを指定します。このオブジェクトはこの目的のために作成されたもので、テーブル関数と同じデータベースに収められています。
- 許可名を指定する場合は、テーブル関数を呼び出す前にその名前で許可オブジェクトを定義する必要があります。
- 許可名を指定しない場合は、デフォルトのDEFINER許可オブジェクトを定義する必要があります。
- デフォルトの許可オブジェクトは、ユーザーがテーブル関数を実行する前に定義しておく必要があります。
- 指定された許可名がUDFの作成時に存在しない場合は、許可名が存在しないことを示す警告がVantageにより報告されます。
- それでもテーブル関数を実行しようとすると、リクエストはアボートし、Vantageは要求元にエラーを返します。
- authorization_name
- オプションの許可名。
- データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
- 指定した許可オブジェクトはあらかじめ定義しておく必要があります。定義されていない場合システムはエラーを報告します。詳細については、CREATE AUTHORIZATIONおよびREPLACE AUTHORIZATIONを参照してください。
- INVOKER
- この目的で存在するデフォルトの許可オブジェクトに関連したOSユーザー コンテキストでテーブル関数が実行されることを指定します。
- CREATE AUTHORIZATIONおよびREPLACE AUTHORIZATIONを参照してください。
- EXECUTE MAP
- 連続マップまたはスパース マップ、また、必要に応じて、テーブル演算子の実行にコロケーション名を指定します。テーブル演算子は、マップ内のAMPでのみ実行されます。
- このマップを上書きするには、テーブル演算子を実行するSELECT文のFROM句のEXECUTE MAP句を指定します。<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照してください。
- 指定されたマップが許可されている必要があります。
- map_name
- 連続マップまたはスパース マップの名前。
- TD_DataDictonaryMapまたはTD_GlobalMapを指定することはできません。
- colocation_name
- 他の関数、テーブル、結合インデックス、またはハッシュ インデックスと同じAMP上の関数を共同設置するために指定します。
- このオプションは、スパース マップに対してのみ指定できます。連続マップの場合、colocation_nameはNULLに設定されます。
- コロケーション名を指定しない場合、名前はデフォルトでdatabase_functionになります。databaseはデータベースまたはユーザーの名前、その後に下線(_)が続き、functionはユーザー定義関数の名前です。databaseが63文字を超える場合、databaseは63文字に切り捨てられます。functionが64文字を超える場合、functionは64文字に切り捨てられます。