TD_ANYTYPEが役立つ場合
- 異なる精度のパラメータと、異なる文字セットによる文字パラメータをサポートするルーチン(関数、メソッド、外部ストアド プロシージャ)を宣言する。
- 関数シグネチャで引数とパラメータが一致しないときに、切り捨てに起因する10進数パラメータの精度低下を回避する。
- 定数のパラメータ カウントがあるがパラメータのデータ型は異なるルーチンをサポートするために必要な、オーバーロードされたルーチンの数を減らす。
- 返されるデータ型が実行時に決定されるルーチンを宣言する。
ルール
- C、C++、またはJavaで記述されたスカラー関数、集約関数およびテーブル関数の入力パラメータ。
- C、C++、またはJavaで記述されたスカラー関数および集約関数の結果パラメータ。
- C、C++、またはJavaで記述された外部ストアド プロシージャのIN、INOUT、またはOUTパラメータ。
- CまたはC++で記述されたUDMの入力および出力パラメータ。
制限
- ストアド プロシージャ
- SQL UDF
- Javaで記述されたUDM
- テーブル演算子の戻り型として
- 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であると宣言します。
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パラメータのデータ型は、対応する入力引数のデータ型によって決まります。