カタログ関数 - ODBC Driver for Teradata

ODBC Driver for Teradata® ユーザー ガイド

Product
ODBC Driver for Teradata
Release Number
16.20
Published
2018年10月
Language
日本語
Last Update
2019-02-12
dita:mapPath
ja-JP/fxv1527114222338.ditamap
dita:ditavalPath
ja-JP/fxv1527114222338.ditaval
dita:id
B035-2526
Product Category
Teradata Tools and Utilities

カタログ関数の中には、新ドライバと旧ドライバで動作が異なるものがあります。以下のセクションでは、こうした関数と、新ドライバと旧ドライバでの相違点について説明します。

カタログ関数 説明
SQLTables ユーザー定義型に対して、TABLE_TYPE列内に値“TYPE”を返します。型名は、TABLE_NAME列内に返されます。
SQLColumns UDT列に対して、DATA_TYPE内に値SQL_UNKNOWN_TYPE(0)を返します。UDT名は、TYPE_NAME列内に返されます。
SQLProcedures マクロ、プロシージャ、およびユーザー定義関数の名前に加えて、ユーザー定義メソッドの名前を返します。

ユーザー定義メソッドに対するPROCEDURE_TYPE列の値は、SQL_PT_PROCEDUREです。

SQLProcedureColumns ユーザー定義メソッドのパラメータ情報を返します。パラメータの型がUDTであることもあり、それらはSQLColumnsカタログ関数の場合と同様に返されます(DATA_TYPE列にSQL_UNKNOWN_TYPE、TYPE_NAME列にUDT名)。

TD_ANYTYPEパラメータの出力は、DATA_TYPE列のSQL_UNKNOWN_TYPE値と、TYPE_NAME列の"TD_ANYTYPE"文字列(引用符なし)になります。

すべてのカタログ関数

旧ドライバは、使用環境がODBC 2.xであるか3.xであるかによって、一部の列名の返し方が異なっていました。新ドライバでは、使用環境がODBC 2.xであっても、常にODBC 3.xの列名が返されます。

SQLBindParameter

日付、時刻、およびタイムスタンプのリテラルのバインド

これらのリテラルをパラメータとしてバインドする場合、旧ドライバでは余分なスペースが含まれるリテラルを使用できました。新ドライバは、ODBCの仕様で規定されている厳密な形式のリテラルのみを受け入れます。この規定形式に従わないリテラルをバインドしようとすると、新ドライバは次のエラーを返します。

[Simba][Support] (40550) Invalid character value for cast specification.(キャストした文字コードが無効です。)

規定形式の詳細については、次の場所にあるODBCプログラマ リファレンス日付、時刻、およびタイムスタンプのリテラルを参照してください。

https://docs.microsoft.com/ja-jp/sql/odbc/reference/develop-app/date-time-and-timestamp-literals.

例として、{d '1995-01-15'}という値は両方のドライバで使用できますが、{ d '1995-01-15'}。という値を受け入れるのは旧ドライバのみです。最初の値では「d」の前にスペースがなく、2番目の値ではスペースが挿入されていることに注意してください。

返されるエラー情報

下記のように、新ドライバと旧ドライバでは一部のエラーに対する応答が異なります。
  • 新ドライバではパラメータ セットでSQL_ARRAY_STATUS_PTRおよびSQL_DIAG_ROW_NUMBERがサポートされないため、パラメータ セットが含まれるクエリーでエラーが発生した場合、これらのプロパティを設定しません。
  • エラーが発生しなくても一部のパラメータ セットが無視された場合、旧ドライバは、SQL_ATTR_PARAMS_PROCESS_PTRを、SQL_ATTR PARAMSET_SIZEから無視されたセットの数を引いた値に設定します。新ドライバでは、SQL_ATTR_PARAMS_PROCESSED_PTRは、SQL_ATTR_PARAMSET_SIZEと同じ値に設定されます。

    新ドライバのこの挙動は、ODBCの仕様に準拠したものです。

    詳細については、ODBCプログラマ リファレンス: https://docs.microsoft.com/ja-jp/sql/odbc/reference/syntax/sqlbindparameter-functionSQLBindParameter関数エラー情報を参照してください。

SQL_DEFAULT_PARAMの使用

StrLen_or_IndPtr引数でSQL_DEFAULT_PARAMが識別子に指定されている場合、旧ドライバはこのパラメータを無視してバッファに保存されている値を使用していました。新ドライバは、SQL_DEFAULT_PARAMの使用環境に応じて次のいずれかの値を返します。
  • このパラメータがストアド プロシージャの呼び出しで指定されている場合、新ドライバは値NULLを使用してストアド プロシージャの呼び出しを完了し、SQL_SUCCESS_WITH_INFOを返します。
  • ストアド プロシージャの呼び出し以外でこのパラメータが指定されている場合、新ドライバは文を実行せずにSQL_ERRORを返します。

新ドライバのこの挙動は、SQL_DEFAULT_PARAMはストアド プロシージャの呼び出しで使用する場合のみ有効になるというODBCの仕様に準拠するものです。Teradata Databaseはストアド プロシージャのデフォルト パラメータをサポートしないため、新ドライバはSQL_DEFAULT_PARAMの値としてNULLを使用します。

詳細については、ODBCプログラマ リファレンス: https://docs.microsoft.com/ja-jp/sql/odbc/reference/syntax/sqlbindparameter-functionSQLBindParameter関数を参照してください。

クエリー パラメータのバインド

新ドライバと旧ドライバでは、クエリー パラメータのバインドでサポートされるユース ケースが異なります。

旧ドライバ 新ドライバ
旧ドライバは、JSONデータまたはWJSONデータをパラメータにバインドするとエラーを返していました。 新ドライバでは、パラメータへのJSONデータおよびWJSONデータのバインドがサポートされます。
旧ドライバでは、負のスケールのSQL_DECIMALデータおよびSQL_NUMERICのバインドはサポートされていませんでした。 新ドライバでは、ODBCの仕様(https://docs.microsoft.com/ja-jp/sql/odbc/reference/appendixes/decimal-digits)に準拠し、これらの値のバインドがサポートされます。
旧ドライバでは、精度が1未満のSQL_DECIMALデータおよびSQL_NUMERICのバインドはサポートされていませんでした。 新ドライバでは、NULL値のバインドをサポートするため、精度が0のSQL_DECIMALデータおよびSQL_NUMERICのバインドがサポートされます。
旧ドライバは、SQLBindParameterを呼び出すときにデータの列サイズを検証し、必要に応じて入力値の列サイズを変更していました。 新ドライバは、列サイズの検証およびSQLBindParameterの入力値の変更は行いません。LOBデータ型をバインドする場合、新ドライバは、LOBデータの最大列サイズとしてGetMaxLobBytes()またはMaxJSONBytes()で返された値を使用します。

出力パラメータのバインド

出力パラメータのバインドでは、データ型の変換が必要になることがあります。こうした場合、旧ドライバは、SQLBindParameterで指定されているデータ型によらず、出力データを対応するSQL型に変換していました。新ドライバはこれと異なり、指定されたSQL型に出力データを変換し、このSQL型に互換性がない場合は変換エラーを返します。新ドライバのこの挙動は、ODBCの仕様に準拠するものです。

例えば、次のようなプロシージャを考えます。

create procedure CharOutputStoredprocedure(OUT param1 CHAR)
cs1: BEGIN
SET param1 = 'A';
END cs1;

出力パラメータを以下のようにバインドするとします。

SQLBindParameter(
	stmt,
	1,
	SQL_PARAM_OUTPUT,
	SQL_C_CHAR,
	SQL_CHAR,
	1024,
	0,
	&out,
	1024,
	&cbRetParam)

指定されたSQL型は元のパラメータのSQL型と同じであるため、データの変換は必要ありません。旧ドライバと新ドライバはともに正常にデータをバインドすることができ、値Aを返します。

しかし、出力パラメータを以下のようにバインドすると、データをCHARからSQL_INTEGERに変換しなければならなくなります。

SQLBindParameter(
	stmt,
	1,
	SQL_PARAM_OUTPUT,
	SQL_C_CHAR,
	SQL_INTEGER,
	1024,
	0,
	&out,
	1024,
	&cbRetParam)

Aは有効なSQL_INTEGER値ではないため、この変換は失敗します。旧ドライバでは、出力データをSQL_CHARに変換してバインドすることで、こうした問題を処理していました。新ドライバは、SQL_INTEGERへのデータの変換を試してから、SQL State 22018の変換エラーを返します。

SQLBindParameterと小数秒を含むデータ型

小数秒が含まれるデータ型を指定してSQLBindParameterを呼び出す場合、DecimalDigitを、データベースでサポートされる最大値の6に設定する必要があります。16.20より前のバージョンでは、こうした場合に0~6のいずれの数字を設定しても6を設定したときと同じ結果が返されていましたが、これは不適切なためサポートされなくなりました。

例えば、小数秒で渡す場合、TIMESTAMP(0)は無効になりました。これは、ODBCの仕様で、小数秒で桁数として0を渡そうとするとエラーが返されると規定されているためです。

Teradata Databaseの上限が6桁のため、指定できる最大桁数は6です。

指定した桁数よりも少ない桁数を渡すことは許容されます。

オプションとして、エラーを起こすことなく0を9桁並べることができます。

SQLCancel

新ドライバと旧ドライバは、ステートメントのタイミングまたは事前処理状態に対する応答が異なります。

ODBCの仕様では、ステートメントで処理が行われていない場合のSQLCancelの動作が以下のように定められています。
  • ODBC 3.5では、SQLCancelは文に影響を及ぼしません。カーソルをクローズするには、アプリケーションでSQLCancelではなくSQLCloseCursorを呼び出す必要があります。
  • ODBC 2.xでは、SQLCancelの効果は、SQLFreeStmtにSQL_CLOSEオプションを指定した場合と同じです。この挙動は完全を期すためだけに定義されたものであり、アプリケーションでカーソルをクローズするには、代わりにSQLFreeStmtまたはSQLCloseCursorを呼び出す方が適切です。

詳細については、ODBC APIリファレンス(https://docs.microsoft.com/ja-jp/sql/odbc/reference/syntax/sqlcancel-function?view=sql-server-2017)のSQLCancel関数を参照してください。

旧ドライバ 新ドライバ
ステートメントを非同期的に実行する場合、SQLCancelの呼び出し前に実行が完了すると旧ドライバはHY008を返していました。 新ドライバは、ステートメント実行の結果(SQL_SUCCESSまたはSQL_ERROR)を返します。
ステートメントの処理が実行される前にSQLCancelが呼び出された場合、旧ドライバは、ドライバの使用環境がODBC 2.xモードとODBC 3.xモードのどちらであってもステートメントをクローズしていました。

こうしたステートメントのクローズは、ODBC 2.xの仕様に準拠したものですが、ODBC 3.xの仕様には準拠していませんでした。

新ドライバは、ODBC 3.xの仕様に準拠して、ODBC 3.xモードではステートメントをクローズしません。

SQLForeignKeys

旧ドライバでは、UPDATE_RULE列およびDELETE_RULE列は空の文字列として返されていましたが、新ドライバではNULLとして返されるようになりました。

SQLGetConnectAttr

次の表に、新ドライバと旧ドライバそれぞれの結果の一覧を示します。

機能 旧ドライバの結果 新ドライバの結果
SQL_ATTR_ASYNC_ENABLE
Return: SQL_ERROR=-1
Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HY092", *pfNativeError = 0, *pcbErrorMsg = 50, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Invalid Attribute"
Return: SQL_SUCCESS=0
Out: *ValuePtr = SQL_ASYNC_ENABLE_OFF = 0, *StringLengthPtr = 4
SQL_ATTR_DISCONNECT_BEHAVIOR
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> dbc: szSqlState = "HY092", *pfNativeError = 0, *pcbErrorMsg = 50, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC Teradata Driver] Invalid Attribute"
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> dbc: szSqlState = "HY092", *pfNativeError = 10210, *pcbErrorMsg = 75, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC] (10210) Attribute identifier invalid or not supported: 114"
SQL_ATTR_ENLIST_IN_DTC
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> dbc: szSqlState = "HY092", *pfNativeError = 0, *pcbErrorMsg = 50, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC Teradata Driver] Invalid Attribute"
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> dbc: szSqlState = "HY092", *pfNativeError = 10210, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC] (10210) Attribute identifier invalid or not supported: 1207"
SQL_ATTR_PACKET_SIZE
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 44, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC Teradata Driver] Unsupported"
Return: SQL_SUCCESS=0 Out: *ValuePtr = 4096, *StringLengthPtr = 4
SQL_ATTR_TRANSLATE_LIB
Return: SQL_SUCCESS=0 Out: *ValuePtr = "쨀쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊쫊...", *StringLengthPtr = 0
Return: SQL_SUCCESS=0 Out: *ValuePtr = "", *StringLengthPtr = 0

SQLGetDiagField

現在、新ドライバでは以下の設定はサポートされていません。
  • SQL_DIAG_CURSOR_ROW_COUNT
  • SQL_DIAG_ROW_COUNT

SQLGetInfo

次の表に、新ドライバと旧ドライバそれぞれの結果の一覧を示します。

機能 旧ドライバの結果 新ドライバの結果
SQL_SQL_CONFORMANCE
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = SQL_SC_SQL92_ENTRY = 1, *StringLengthPtr = 4
SQL_CATALOG_NAME_SEPARATOR
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = 0
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = ".", *StringLengthPtr = 2
SQL_CREATE_TABLE
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000000, *StringLengthPtr = 4
SQL_DROP_TABLE
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000000, *StringLengthPtr = 4
SQL_DROP_VIEW
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000000, *StringLengthPtr = 4
SQL_GETDATA_EXTENSIONS
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x0000000B = SQL_GD_ANY_COLUMN | SQL_GD_ANY_ORDER | SQL_GD_BOUND, *StringLengthPtr = 4
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x0000000F = SQL_GD_ANY_COLUMN | SQL_GD_ANY_ORDER | SQL_GD_BLOCK | SQL_GD_BOUND, *StringLengthPtr = 4
SQL_INDEX_KEYWORDS
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000000, *StringLengthPtr = 4
SQL_LOCK_TYPES
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000001 = SQL_LCK_NO_CHANGE, *StringLengthPtr = 4
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000002 = SQL_LCK_EXCLUSIVE, *StringLengthPtr = 4
SQL_MAX_ASYNC_CONCURRENT_STATEMENTS
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0, *StringLengthPtr = 4
SQL_NUMERIC_FUNCTIONS
Return: SQL_SUCCESS=0
Out:*InfoValuePtr = 0x00014D01 = SQL_FN_NUM_ABS | SQL_FN_NUM_EXP | SQL_FN_NUM_LOG | SQL_FN_NUM_MOD | SQL_FN_NUM_SQRT | SQL_FN_NUM_PI, StringLengthPtr = 4
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00194D01 = SQL_FN_NUM_ABS | SQL_FN_NUM_EXP | SQL_FN_NUM_LOG | SQL_FN_NUM_MOD | SQL_FN_NUM_SQRT | SQL_FN_NUM_PI | SQL_FN_NUM_LOG10 | SQL_FN_NUM_POWER, *StringLengthPtr = 4
SQL_ODBC_SAG_CLI_CONFORMANCE
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = SQL_OSCC_COMPLIANT = 1, *StringLengthPtr = 2
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = SQL_OSCC_NOT_COMPLIANT = 0, *StringLengthPtr = 2
SQL_POS_OPERATIONS
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000001 = SQL_POS_POSITION, *StringLengthPtr = 4
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000000, *StringLengthPtr = 4
SQL_QUALIFIER_NAME_SEPARATOR
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = 0
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = ".", *StringLengthPtr = 2
SQL_SCROLL_CONCURRENCY
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000001 = SQL_SCCO_READ_ONLY, *StringLengthPtr = 4
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000003 = SQL_SCCO_READ_ONLY | SQL_SCCO_LOCK, *StringLengthPtr = 4
SQL_SQL92_GRANT
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000010 = SQL_SG_WITH_GRANT_OPTION, *StringLengthPtr = 4
SQL_SQL92_PREDICATES
Return: SQL_ERROR=-1Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00003F07 = SQL_SP_EXISTS | SQL_SP_ISNOTNULL | SQL_SP_ISNULL | SQL_SP_UNIQUE | SQL_SP_LIKE | SQL_SP_IN | SQL_SP_BETWEEN | SQL_SP_COMPARISON | SQL_SP_QUANTIFIED_COMPARISON, *StringLengthPtr = 4
SQL_SQL92_RELATIONAL_JOIN_OPERATORS
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x0000015A = SQL_SRJO_CROSS_JOIN | SQL_SRJO_FULL_OUTER_JOIN | SQL_SRJO_INNER_JOIN | SQL_SRJO_LEFT_OUTER_JOIN | SQL_SRJO_RIGHT_OUTER_JOIN, *StringLengthPtr = 4
SQL_SQL92_STRING_FUNCTIONS
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000006 = SQL_SSF_LOWER | SQL_SSF_UPPER, *StringLengthPtr = 4
SQL_STATIC_SENSITIVITY
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000000, *StringLengthPtr = 4
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = 0x00000003 = SQL_SS_ADDITIONS | SQL_SS_DELETIONS, *StringLengthPtr = 4
SQL_XOPEN_CLI_YEAR
Return: SQL_ERROR=-1
Out: *InfoValuePtr = <unmodified>, *StringLengthPtr = <unmodified>
dbc: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 76, *ColumnNumber = -1, *RowNumber = -1
MessageText = "[Teradata][ODBC Teradata Driver] Driver does not support specified fInfoType"
Return: SQL_SUCCESS=0
Out: *InfoValuePtr = "1995", *StringLengthPtr = 8

SQLGetStmtAttr

次の表に、新ドライバと旧ドライバそれぞれの結果の一覧を示します。

機能 旧ドライバの結果 新ドライバの結果
SQL_ATTR_CURSOR_SCROLLABLE
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> stmt: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 44, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC Teradata Driver] Unsupported"
Return: SQL_SUCCESS=0 Out: *ValuePtr = 0, *StringLengthPtr = 4
SQL_ATTR_CURSOR_SENSITIVITY
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> stmt: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 44, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC Teradata Driver] Unsupported"
Return: SQL_SUCCESS=0 Out: *ValuePtr = 0, *StringLengthPtr = 4
SQL_ATTR_KEYSET_SIZE
Return: SQL_SUCCESS=0 Out: *ValuePtr = 0, *StringLengthPtr = <unmodified>
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> stmt: szSqlState = "HY092", *pfNativeError = 10210, *pcbErrorMsg = 73, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC] (10210) Attribute identifier invalid or not supported: 8"
SQL_ATTR_RETRIEVE_DATA
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> stmt: szSqlState = "HYC00", *pfNativeError = 0, *pcbErrorMsg = 44, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC Teradata Driver] Unsupported"
Return: SQL_SUCCESS=0 Out: *ValuePtr = SQL_RD_ON = 1, *StringLengthPtr = 4
SQL_ATTR_ROW_NUMBER
旧ドライバは常にSQL_ROW_NUMBER_UNKNOWNを返しますが、新ドライバは結果セット全体における現在の行の実際の番号を返します。
Return: SQL_SUCCESS=0
Out: *ValuePtr = 0, *StringLengthPtr = <unmodified>
Return: SQL_SUCCESS=0
Out: *ValuePtr = 1, *StringLengthPtr = 4
SQL_ATTR_SIMULATE_CURSOR
Return: SQL_SUCCESS=0 Out: *ValuePtr = SQL_SC_NON_UNIQUE = 0, *StringLengthPtr = <unmodified>
Return: SQL_ERROR=-1 Out: *ValuePtr = <unmodified>, *StringLengthPtr = <unmodified> stmt: szSqlState = "HY092", *pfNativeError = 10210, *pcbErrorMsg = 74, *ColumnNumber = -1, *RowNumber = -1 MessageText = "[Teradata][ODBC] (10210) Attribute identifier invalid or not supported: 10"

SQLGetTypeInfo

新ドライバは、インデックス20で追加のカスタム列「USER_DATA_TYPE」を返します。

新ドライバの列:

1, TYPE_NAME, 9, SQL_VARCHAR=12, 128, 0, SQL_NO_NULLS=0
2, DATA_TYPE, 9, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
3, COLUMN_SIZE, 11, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
4, LITERAL_PREFIX, 14, SQL_VARCHAR=12, 32, 0, SQL_NULLABLE=1
5, LITERAL_SUFFIX, 14, SQL_VARCHAR=12, 32, 0, SQL_NULLABLE=1
6, CREATE_PARAMS, 13, SQL_VARCHAR=12, 32, 0, SQL_NULLABLE=1
7, NULLABLE, 8, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
8, CASE_SENSITIVE, 14, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
9, SEARCHABLE, 10, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
10, UNSIGNED_ATTRIBUTE, 18, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
11, FIXED_PREC_SCALE, 16, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
12, AUTO_UNIQUE_VALUE, 17, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
13, LOCAL_TYPE_NAME, 15, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
14, MINIMUM_SCALE, 13, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
15, MAXIMUM_SCALE, 13, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
16, SQL_DATA_TYPE, 13, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
17, SQL_DATETIME_SUB, 16, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
18, NUM_PREC_RADIX, 14, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
19, INTERVAL_PRECISION, 18, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
20, USER_DATA_TYPE, 14, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
21, TDODBC_DATA_TYPE, 16, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0

旧ドライバの列:

1, TYPE_NAME, 9, SQL_VARCHAR=12, 39, 0, SQL_NO_NULLS=0
2, DATA_TYPE, 9, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
3, COLUMN_SIZE, 11, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
4, LITERAL_PREFIX, 14, SQL_VARCHAR=12, 11, 0, SQL_NULLABLE=1
5, LITERAL_SUFFIX, 14, SQL_VARCHAR=12, 18, 0, SQL_NULLABLE=1
6, CREATE_PARAMS, 13, SQL_VARCHAR=12, 18, 0, SQL_NULLABLE=1
7, NULLABLE, 8, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
8, CASE_SENSITIVE, 14, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
9, SEARCHABLE, 10, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
10, UNSIGNED_ATTRIBUTE, 18, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
11, FIXED_PREC_SCALE, 16, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
12, AUTO_UNIQUE_VALUE, 17, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
13, LOCAL_TYPE_NAME, 15, SQL_VARCHAR=12, 39, 0, SQL_NULLABLE=1
14, MINIMUM_SCALE, 13, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
15, MAXIMUM_SCALE, 13, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
16, SQL_DATA_TYPE, 13, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
17, SQL_DATETIME_SUB, 16, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
18, NUM_PREC_RADIX, 14, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
19, INTERVAL_PRECISION, 18, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
20, TDODBC_DATA_TYPE, 16, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0

SQLProcedureColumns

旧ドライバでは、文字列の列にSQL_VARCHARが使用されていました。新ドライバは文字列の列にはSQL_WVARCHARを使用し、インデックス20および21で2つの追加のカスタム列を返します。

新ドライバの列:

1, PROCEDURE_CAT, 13, SQL_VARCHAR=12, 1024, 0, SQL_NULLABLE=1
2, PROCEDURE_SCHEM, 15, SQL_VARCHAR=12, 30, 0, SQL_NULLABLE=1
3, PROCEDURE_NAME, 14, SQL_VARCHAR=12, 30, 0, SQL_NO_NULLS=0
4, COLUMN_NAME, 11, SQL_VARCHAR=12, 30, 0, SQL_NO_NULLS=0
5, COLUMN_TYPE, 11, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
6, DATA_TYPE, 9, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
7, TYPE_NAME, 9, SQL_VARCHAR=12, 128, 0, SQL_NO_NULLS=0
8, COLUMN_SIZE, 11, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
9, BUFFER_LENGTH, 13, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
10, DECIMAL_DIGITS, 14, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
11, NUM_PREC_RADIX, 14, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
12, NULLABLE, 8, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
13, REMARKS, 7, SQL_VARCHAR=12, 254, 0, SQL_NULLABLE=1
14, COLUMN_DEF, 10, SQL_VARCHAR=12, 4000, 0, SQL_NULLABLE=1
15, SQL_DATA_TYPE, 13, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
16, SQL_DATETIME_SUB, 16, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
17, CHAR_OCTET_LENGTH, 17, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
18, ORDINAL_POSITION, 16, SQL_INTEGER=4, 10, 0, SQL_NO_NULLS=0
19, IS_NULLABLE, 11, SQL_VARCHAR=12, 254, 0, SQL_NULLABLE=1
20, IS RESULT SET COLUMN, 20, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
21, USER_DATA_TYPE, 14, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
22, TDODBC_DATA_TYPE, 16, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0

旧ドライバの列:

1, PROCEDURE_CAT, 13, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
2, PROCEDURE_SCHEM, 15, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
3, PROCEDURE_NAME, 14, SQL_VARCHAR=12, 128, 0, SQL_NO_NULLS=0
4, COLUMN_NAME, 11, SQL_VARCHAR=12, 128, 0, SQL_NO_NULLS=0
5, COLUMN_TYPE, 11, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
6, DATA_TYPE, 9, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
7, TYPE_NAME, 9, SQL_VARCHAR=12, 128, 0, SQL_NO_NULLS=0
8, COLUMN_SIZE, 11, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
9, BUFFER_LENGTH, 13, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
10, DECIMAL_DIGITS, 14, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
11, NUM_PREC_RADIX, 14, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
12, NULLABLE, 8, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
13, REMARKS, 7, SQL_VARCHAR=12, 254, 0, SQL_NULLABLE=1
14, COLUMN_DEF, 10, SQL_VARCHAR=12, 60, 0, SQL_NULLABLE=1
15, SQL_DATA_TYPE, 13, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0
16, SQL_DATETIME_SUB, 16, SQL_SMALLINT=5, 5, 0, SQL_NULLABLE=1
17, CHAR_OCTET_LENGTH, 17, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
18, ORDINAL_POSITION, 16, SQL_INTEGER=4, 10, 0, SQL_NO_NULLS=0
19, IS_NULLABLE, 11, SQL_VARCHAR=12, 3, 0, SQL_NULLABLE=1
20, TDODBC_DATA_TYPE, 16, SQL_SMALLINT=5, 5, 0, SQL_NO_NULLS=0

SQLTables

ワイルドカード文字(%)を使用したパターン マッチングを行なう場合、デフォルトのカタログ メタデータはNULLであるため、新ドライバは一部の列のSQL型としてSQL_INTEGERを返します。

例えば、次のような呼び出しを考えます。

SQLTables(<empty string>, %, <empty string>, <null pointer>)

新ドライバの結果:

icol, szColName, *pcbColName, *pfSqlType, *pcbColDef, *pibScale, *pfNullable
1, TABLE_CAT, 9, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
2, TABLE_SCHEM, 11, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
3, TABLE_NAME, 10, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
4, TABLE_TYPE, 10, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1
5, REMARKS, 7, SQL_INTEGER=4, 10, 0, SQL_NULLABLE=1

旧ドライバの結果:

icol, szColName, *pcbColName, *pfSqlType, *pcbColDef, *pibScale, *pfNullable
1, TABLE_CAT, 9, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
2, TABLE_SCHEM, 11, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
3, TABLE_NAME, 10, SQL_VARCHAR=12, 128, 0, SQL_NULLABLE=1
4, TABLE_TYPE, 10, SQL_VARCHAR=12, 17, 0, SQL_NULLABLE=1
5, REMARKS, 7, SQL_VARCHAR=12, 254, 0, SQL_NULLABLE=1