関数に渡す変数のデータ型(UDT、VARIANT_TYPE UDT型、TD_ANYTYPE UDT型を含む)と、任意指定のパラメータ名を括弧で囲みカンマで区切ったリスト。データ型は、同じ名前でオーバーロードされた関数を区別するために必要になります。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。
- parameter_name data type
- パラメータ名はテーブルUDF定義内で固有でなければなりません。
- UDFが受け入れる最大パラメータ数は128です。
- 関数に渡すパラメータがない場合でも、右括弧と左括弧を指定する必要があります。
- Teradata Databaseでは、テーブル関数の入力パラメータでシステム定義のパラメータ型VARIANT_TYPEを使用できます。
- テーブル関数の入力パラメータでシステム定義のパラメータ型VARIANT_TYPEを指定するときのルールと制限事項を以下にまとめます。
- CまたはC++で記述されている外部ルーチンの格納先パラメータのデータ型としてVARIANT_TYPEを指定できます。
- Javaで記述されている外部ルーチンの格納先パラメータのデータ型としてVARIANT_TYPEを指定することはできません。
- UDFでは、最大で128個のパラメータを使用できますが、各VARIANT_TYPE入力パラメータでさらに128個のパラメータに対応できます。最大で8個のUDF入力パラメータをVARIANT_TYPEデータ型として宣言できるので、最大数のVARIANT_TYPEパラメータを指定した場合にTeradata Databaseで実際に使用できる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を指定することはできません。指定した場合、Teradata Databaseは要求元にエラーを返します。
- パラメータ データ型BLOBおよびCLOBは、必ずロケータで表わします。逆に、RETURN TABLE句のLOB列データ型はロケータで表わしてはなりません。ロケータの説明については、<Teradata Vantage™ SQLデータ操作言語、B035-1146>の「USING要求修飾子」を参照してください。
- Teradata Databaseではメモリ内LOBパラメータはサポートされません。LOBパラメータごとに、AS LOCATOR句を指定する必要があります。
- ただし、データ型変換を必要とするLOBをテーブルUDFに渡すときには、変換を行なうために常にLOBを実体化する必要があります。
- パラメータ名を1つ指定する場合は、関数に渡すすべてのパラメータの名前を指定する必要があります。
- パラメータ名を指定しない場合、システムはP1、P2、…、Pnの形式でパラメータに固有名を割り当てます。 これらの名前はCOMMENT文で使用され、HELP FUNCTION文で生成されるレポートに表示され、エラー メッセージのテキストに表示されます。 COMMENT(コメント配置形式)とHELP ONLINEを参照してください。
- 各パラメータに関連したデータ型は、パラメータまたは戻り値の型です。すべてのTeradata Databaseのデータ型は有効です。文字データは、CHARACTER SET句も指定できます。
- BYTE、CHARACTER、DECIMAL、VARCHARなど、長さやサイズを指定するデータ型では、パラメータのサイズが、渡すことのできる最大バイト数になります。
例: 派生テーブルから呼び出される変数参照テーブル関数
この例は、派生テーブルに等価結合される変数参照テーブル関数を示しています(<Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147>の「変数モードのテーブル関数の本体」を参照)。
まず派生テーブルdt1がtbl1のサブセットとして作成された後、各行の列dt1.c1がテーブル関数に渡されます。その結果として生成されるテーブル関数の行は、WHERE条件によって派生テーブルの選択行と組み合わせられます。
関連する テーブル定義は、以下のようになります。
CREATE FUNCTION tudf1 (FLOAT, INTEGER, INTEGER)
RETURN TABLE (
c1 DECIMAL,
c2 INTEGER,
c3 INTEGER)
… ;
このテーブル関数を使用するSELECTリクエストは次のとおりです。
SELECT dt1.c1, tf2.c2, tf2.c3
FROM (SELECT c1, c2
FROM tbl1
WHERE c1 < 500) AS dt1,
TABLE (tudf1(45.6, 193, dt1.c1)) AS tf2 (nc1, nc2, nc3)
WHERE dt1.c1 = tf2.nc1);
例: UDTデータ型の列を返すUDTパラメータ指定を使用したテーブル関数
この例では、udtc4という名前のDISTINCT UDT列を返すUDTパラメータを指定したテーブルUDFを作成します。
最初に、TABLEINTという名前の新しいDISTINCTデータ型を作成します。
CREATE TYPE TABLEINT AS INTEGER FINAL;
さらに、データ型TABLEINTの入力パラメータp2を宣言するfnc_tbf001udtという名前のテーブル関数を作成します。
CREATE FUNCTION fnc_tbf001udt(
p1 INTEGER,
p2 TABLEINT)
RETURNS TABLE (c1 INTEGER,
c2 INTEGER,
c3 VARCHAR(3),
udtc4 TABLEINT)
LANGUAGE C
NO SQL
PARAMETER STYLE SQL
EXTERNAL NAME 'CS!fnc_tbf001udt!fnc_tbf001udt.c';
このテーブル関数でSELECTリクエストで使用して、テーブルの形式で結果を返します。
SELECT *
FROM TABLE(fnc_tbf001udt(1, 1)) AS t1
WHERE t1.c2 IN (0,1);
fnc_tbf001udtのような外部関数をコーディングする方法については、<Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147>を参照してください。