UDMのC/C++関数の最初のパラメータは、常にそのUDMを呼び出す対象となるUDTのハンドルです。UDMは、UDTのハンドルを使用することによって、呼び出し対象であるUDTの値を取得します。
UDTハンドル パラメータの後に続くパラメータは、CREATE TYPE文のMETHOD指定内のパラメータに対応します。
メソッドにおいて引数にNULLを渡せるようにするには、パラメータ スタイルSQLを使用します。それ以外の場合は、パラメータ スタイルTD_GENERALを使用します。
パラメータ スタイルSQLを使用する場合は、各パラメータのインジケータ パラメータを定義する必要があります。
パラメータ スタイルTD_GENERALの構文
void method_name ( UDT_HANDLE *udthandle, type_1 *input_parameter_1, ..., type_n *input_parameter_n, result_type *result, char sqlstate[6] ) { ... }
パラメータ スタイルSQLの構文
void method_name ( UDT_HANDLE *udthandle, type_1 *input_parameter_1, ..., type_n *input_parameter_n, int *indicator_parameter_1, ..., int *indicator_parameter_n, char sqlstate[6], SQL_TEXT method_name[m], SQL_TEXT specific_method_name[l], SQL_TEXT error_message[p] ) { ... }
説明
パラメータ | 指定内容 | 入力/ 出力 |
---|---|---|
UDT_HANDLE * udthandle | UDMの呼び出し対象であるUDTのハンドル。サブジェクト パラメータとも呼びます。 | 入力 |
type_n * input_parameter_n | 入力パラメータ。nは、CREATE TYPE文のMETHOD指定中のパラメータの数です。n = 0なら、入力パラメータはありません。このデータ型は、sqltypes_td.h内のCデータ型のうち、入力引数のSQLデータ型に対応するものです。 入力パラメータの数は最大128個です。 |
入力 |
result_type * result | 結果。 resultは、メソッドの戻す結果を入れる十分な大きさのデータ領域へのポインタです。そのデータ領域は、対応するMETHOD指定のRETURNS句で定義されるものです。 |
出力 |
int * indicator_parameter_n | 入力パラメータに同じ順序で対応するインジケータ パラメータ(n > 0のメソッドの場合)。 インジケータ引数の値
|
入力 |
int * indicator_result | 結果に対応する結果インジケータ パラメータ。 | 出力 |
char sqlstate[6] | 成功、例外、または警告を示す戻り値。これは、6文字のC文字列へのポインタです(最初の5文字はASCII、最後の文字はCのNULL文字)。関数でエラーを検出した場合、関数でsqlstateをSQLSTATEの例外または警告に設定できます。 この文字列の初期値は'00000' (成功)です。 SQLSTATE値の詳細は、SQLSTATEの値を戻すを参照してください。 |
出力 |
SQL_TEXT method_name[m] | メソッド名。これはC文字列へのポインタです。これは、CREATE TYPE文内のMETHOD method_nameで指定されるメソッド名と同じ名前です。 UDTの中では、この名前を使用してエラー メッセージを作成できます。 ANSI SQL標準では、mの最大値は128と定義されています。Teradata Databaseでは、メソッド名は最大30文字です。 |
入力 |
SQL_TEXT specific_method_name[l] | 同じ名前のメソッドが複数個ある場合、呼び出す外部メソッドの特定名。これはC文字列へのポインタです。これは、CREATE TYPE文内のMETHOD指定のSPECIFIC 句に指定する特定名と同じ名前です。 CREATE TYPE文にSPECIFIC句が含まれていない場合、この名前は、METHOD method_nameで指定されるメソッド名と同じです。 UDTの中では、この名前を使用してエラー メッセージを作成できます。 ANSI SQL標準では、lの最大値は128と定義されています。Teradata Databaseでは、メソッド名は最大30文字です。 |
入力 |
SQL_TEXT error_message[p] | エラー メッセージのテキスト。これは、C文字列へのポインタであり、pの最大値は256です。 | 出力 |
例: パラメータ スタイルTD_GENERALのUDM
以下に示すのは、パラメータ スタイルTD_GENERALを使用するUDMのC関数を示すコードの一部です。
/***** C source file name: to_inches.c *****/ #define SQL_TEXT Latin_Text #include <sqltypes_td.h> #include <string.h> void meters_toInches( UDT_HANDLE *meterUDT FLOAT *result, char sqlstate[6]) { ... }
C関数の完全な例については、UDMのサンプル コードを参照してください。
メソッドに関連付けられたUDTを作成するCREATE TYPE文は、次のようになります。
CREATE TYPE meter AS FLOAT FINAL INSTANCE METHOD toInches() RETURNS FLOAT SPECIFIC toInches NO SQL PARAMETER STYLE TD_GENERAL DETERMINISTIC LANGUAGE C;
サ―バーにUDMをインストールするための対応するCREATE METHOD文は、以下のようになります。
CREATE METHOD toInches() RETURNS FLOAT FOR meter EXTERNAL NAME 'CS!toinches!udm_src/to_inches.c!F!meters_toInches';
例: パラメータ スタイルSQLのUDM
以下に示すのは、パラメータ スタイルSQLを使用するUDMのC関数の宣言方法を示すサンプルです。
/***** C source file name: to_inches.c *****/ #define SQL_TEXT Latin_Text #include <sqltypes_td.h> #include <string.h> void meters_toInches( UDT_HANDLE *meterUDT FLOAT *result, int *meterUDTIsNull, int *resultIsNull, char sqlstate[6]) SQL_TEXT extname[129], SQL_TEXT specific_name[129], SQL_TEXT error_message[257] ) { ... }
C関数の完全な例については、UDMのサンプル コードを参照してください。
メソッドに関連付けられたUDTを作成するCREATE TYPE文は、次のようになります。
CREATE TYPE meter AS FLOAT FINAL INSTANCE METHOD toInches() RETURNS FLOAT SPECIFIC toInches NO SQL PARAMETER STYLE SQL DETERMINISTIC LANGUAGE C;
サ―バーにUDMをインストールするための対応するCREATE METHOD文は、以下のようになります。
CREATE METHOD toInches() RETURNS FLOAT FOR meter EXTERNAL NAME 'CS!toinches!udm_src/to_inches.c!F!meters_toInches';
引数の動作
詳細情報 | 参照先 |
---|---|
引数がNULLの場合の動作 | リテラル引数としてNULLを使用する場合の動作 |
文字列引数の切り捨て | 文字列引数の切り捨て |
オーバーフローと数値引数 | オーバーフローと数値引数 |