16.20 - TD_ANYTYPEデータ型 - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

入力または結果パラメータのデータ型であり、UDF、UDM、および外部ストアド プロシージャで使用されます。また、あらゆるシステム定義型データ型またはユーザー定義型(UDT)データ型を受け入れることができます。パラメータの属性と戻りタイプは、実行時に決定されます。

構文



parameter_name
UDF、UDM、または外部ストアド プロシージャで宣言された入力または結果パラメータの名前。

ANSI準拠

TD_ANYTYPEは、ANSI SQL規格に対するTeradataの拡張機能です。

使用上の注意

TD_ANYTYPEデータ型は、以下の場合に有用です。
  • 異なる精度のパラメータと、異なる文字セットによる文字パラメータをサポートするルーチン(関数、メソッド、外部ストアド プロシージャ)を宣言する。
  • 関数シグネチャで引数とパラメータが一致しないときに、切り捨てに起因する10進数パラメータの精度低下を回避する。
  • 定数のパラメータ カウントがあるがパラメータのデータ型は異なるルーチンをサポートするために必要な、オーバーロードされたルーチンの数を減らす。
  • 返されるデータ型が実行時に決定されるルーチンを宣言する。

ルール

以下に対しては、TD_ANYTYPEのみをデータ型として指定できます。
  • C、C++、またはJavaで記述されたスカラー関数、集約関数およびテーブル関数の入力パラメータ。
  • C、C++、またはJavaで記述されたスカラー関数および集約関数の結果パラメータ。
  • C、C++、またはJavaで記述された外部ストアド プロシージャのIN、INOUT、またはOUTパラメータ。
  • CまたはC++で記述されたUDMの入力および出力パラメータ。

制限

TD_ANYTYPEは、以下に対するパラメータ タイプとしてサポートされていません。
  • ストアド プロシージャ
  • SQL UDF
  • Javaで記述されたUDM
以下の場合、TD_ANYTYPEを使用できません。
  • テーブル演算子の戻り型として
  • Javaルーチン内でUDTパラメータを表わす目的で

TD_ANYTYPE結果パラメータの戻りタイプの宣言

TD_ANYTYPE結果パラメータを使用して定義されるUDFまたはUDMを呼び出すときに、RETURNSdata typeまたはRETURNS STYLEcolumn expressionの句を使用して、必要な戻りタイプを指定できます。この列式は、有効なテーブルまたはビューの列参照にすることができます。また、戻り値のデータ型は、列の型に応じて決定されます。

例えば、次のようになります。

SELECT (routine_name  (parameter_list) RETURNS  data_type);
SELECT (routine_name  (parameter_list) RETURNS STYLE  TableName.ColumnName);

上記のクエリーでは、指定されたパラメータを使用してroutine_nameを呼び出し、戻りタイプがdata_typeまたは列のデータ型TableName.ColumnNameであると宣言します。

RETURNS句やRETURNS STYLE句を使用する場合は、UDFまたはUDM呼び出しを括弧で囲む必要があります。

TD_ANYTYPE OUTパラメータを使用して定義される外部ストアド プロシージャを呼び出すときに、CALL文でRETURNSdata typeまたはRETURNS STYLEcolumn expressionの句とOUTパラメータを指定して、必要なOUTパラメータの戻りタイプを示すことができます。

例えば、次のようになります。

CALL  procedure_name(parameter1,  out_parameter  RETURNS  data_type);
CALL  procedure_name(parameter1,  out_parameter  RETURNS STYLE  TableName.ColumnName);

RETURNS句またはRETURNS STYLE句は、TD_ANYTYPE入力パラメータがルーチンにも含まれている場合は必須ではありません。RETURNS句またはRETURNS STYLE句を指定していないときには、TD_ANYTYPE結果パラメータまたはOUTパラメータの戻りタイプを決定するために、最初のTD_ANYTYPE入力引数のデータ型が使用されます。文字データ型の場合、データ型の一部として文字セットが指定されていないときには、デフォルトの文字セットが使用されます。

RETURNS句とRETURNS STYLE句は、外部ストアド プロシージャで戻りタイプをTD_ANYTYPE OUTパラメータに設定するためにのみ使用します。TD_ANYTYPE INOUTパラメータのデータ型は、対応する入力引数のデータ型によって決まります。

例: TD_ANYTYPEデータ型

次の関数定義について考えてみましょう。

CREATE FUNCTION ascii (string_expr TD_ANYTYPE)
   RETURNS TD_ANYTYPE
   LANGUAGE C
   NO SQL
   SPECIFIC ascii
   EXTERNAL NAME 'CS!ascii!UDFs/ascii.c'
   PARAMETER STYLE SQL;
この関数は、入力した文字列に含まれる最初の文字のASCII数値を返します。この関数では、次のデータ型の入力文字列を受け入れます。
  • CHARACTER
  • VARCHAR
  • CLOB
  • CHARACTER、VARCHARまたはCLOB属性を持つUDT
  • CHARACTERまたはVARCHARの要素型を持つARRAY

この関数は、入力文字列に関連付けられた文字セットを受け入れます。文字セットを明示的に指定していない場合は、デフォルトの文字セットが使用されます。

この関数でサポートされる戻りタイプは、BYTEINT、SMALLINT、またはINTEGERです。この関数に必要な戻りタイプを指定するには、関数を呼び出す時に、RETURNSdata typeかRETURNS STYLEcolumn expressionの句を使用します。

この関数を呼び出すクエリーの例を以下に示します。

SELECT (ascii('hello') RETURNS INTEGER);

このクエリーが返す出力は、次のとおりです。

ascii('hello')
--------------
           104

この関数の詳細と、対応するCコードの例は、<Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147>を参照してください。

関連トピック

詳細情報 参照先
UDFのTD_ANYTYPE入力パラメータと結果パラメータの宣言 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE FUNCTION」、外部形式とテーブル形式
メソッドのTD_ANYTYPE入力パラメータと結果パラメータの宣言 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE METHOD」
外部ストアド プロシージャのTD_ANYTYPE IN、INOUT、またはOUTパラメータの宣言 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE PROCEDURE (外部形式)」
TD_ANYTYPE入力および結果パラメータを使用するルーチンの記述 Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147.