データ型 - Teradata Database - Teradata Vantage NewSQL Engine - データ型オプション、CREATE FUNCTION(テーブル形式)SQL文。

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

関数に渡す変数のデータ型(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つ指定する場合は、関数に渡すすべてのパラメータの名前を指定する必要があります。
パラメータ名を指定しない場合、システムはP1P2、…、Pnの形式でパラメータに固有名を割り当てます。 これらの名前はCOMMENT文で使用され、HELP FUNCTION文で生成されるレポートに表示され、エラー メッセージのテキストに表示されます。 COMMENT(コメント配置形式)HELP ONLINEを参照してください。
各パラメータに関連したデータ型は、パラメータまたは戻り値の型です。すべてのTeradata Databaseのデータ型は有効です。文字データは、CHARACTER SET句も指定できます。
BYTE、CHARACTER、DECIMAL、VARCHARなど、長さやサイズを指定するデータ型では、パラメータのサイズが、渡すことのできる最大バイト数になります。

例: 派生テーブルから呼び出される変数参照テーブル関数

この例は、派生テーブルに等価結合される変数参照テーブル関数を示しています(<Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147>の「変数モードのテーブル関数の本体」を参照)。

まず派生テーブルdt1tbl1のサブセットとして作成された後、各行の列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>を参照してください。