カタログ関数 - ODBC Driver for Teradata

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

Product
ODBC Driver for Teradata
Release Number
17.10
Published
2021年6月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/wxs1608578396899.ditamap
dita:ditavalPath
ja-JP/wxs1608578396899.ditaval
dita:id
B035-2526
Product Category
Teradata Tools and Utilities

バージョン16.20のドライバ以降、一部のカタログ関数はODBC Driver for Teradataでは挙動が異なります。関数、およびODBC Driver for Teradataの挙動の違いについて、以下のセクションで説明します。

カタログ関数 説明
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環境のどちらで動作しているかに関係なく、16.20以降では、ODBC Driver for Teradataは常にODBC 2.xの列名を返します。バージョン16.10以前では、ODBC Driver for Teradataは、一部の列に対して返される名前が、環境に応じて異なっていました。

SQLBindParameter

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

バージョン16.10以前のドライバでは、これらのリテラルをパラメータとしてバインドする場合、ODBC Driver for Teradataは余分なスペースが含まれているリテラルを受け入れていました。16.20以降、ODBC Driver for Teradataは、ODBCの仕様で規定されている厳密な形式のリテラルのみを受け入れます。この規定形式に従っていないリテラルをバインドしようとすると、ODBC Driver for Teradataは次のエラーを返します。

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

規定形式の詳細については、<ODBCプログラマ リファレンス>(https://docs.microsoft.com/sql/odbc/reference/develop-app/date-time-and-timestamp-literals)の「日付、時刻、およびタイムスタンプのリテラル」を参照してください。

例えば、{d '1995-01-15'}という値は両方のドライバで受け入れられますが、16.10以前のバージョンのODBC Driver for Teradata{ d '1995-01-15'}という値が受け入れられます(1つ目の値では"d"の前に空白文字はありませんが、2つ目の値では空白文字が挿入されています)。

返されるエラー情報

ドライバのバージョン16.20以降、ODBC Driver for Teradataでは、特定のエラーに対する応答が異なっています。
  • バージョン16.20以降、ODBC Driver for Teradataは、パラメータ セットでSQL_ARRAY_STATUS_PTRおよびSQL_DIAG_ROW_NUMBERをサポートしなくなったため、パラメータ セットが入っているクエリーでエラーが発生した場合に、これらのプロパティは設定されません。
  • バージョン16.10以前のドライバでは、エラーは発生しなかったが、一部のパラメータ セットが無視された場合、ODBC Driver for TeradataはSQL_ATTR_PARAMS_PROCESS_PTRを、無視されたセットの数をSQL_ATTR PARAMSET_SIZEから減算した値に設定していました。16.20以降、ODBC Driver for Teradataは、SQL_ATTR_PARAMS_PROCESSED_PTRを、SQL_ATTR_PARAMSET_SIZEと同じ値に設定します。この挙動はODBCの仕様に準拠しています。

    詳細については、<ODBCプログラマ リファレンス>(https://docs.microsoft.com/sql/odbc/reference/syntax/sqlbindparameter-function)の「SQLBindParameter関数」にある「エラー情報」を参照してください。

SQL_DEFAULT_PARAMの使用

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

この挙動は、SQL_DEFAULT_PARAMはストアド プロシージャの呼び出しで使用されている場合のみ有効であると規定しているODBCの仕様に準拠しています。データベースはストアド プロシージャに対するデフォルト パラメータをサポートしていないため、ODBC Driver for TeradataはSQL_DEFAULT_PARAMの値としてNULLを使用します。

詳細については、<ODBCプログラマ リファレンス>(https://docs.microsoft.com/sql/odbc/reference/syntax/sqlbindparameter-function)の「SQLBindParameter関数」を参照してください。

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

クエリー パラメータをバインドする場合、ODBC Driver for Teradataではさまざまな使用ケースがサポートされています。

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

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

出力パラメータのバインドでは、データ型の変換が必要になることがあります。このような場合、バージョン16.10以前のODBC Driver for Teradataは、SQLBindParameterで指定されているデータ型に関係なく、出力データを、対応するSQL型に変換していました。16.20以降、ODBC Driver for Teradataは、出力データを、指定されている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型と同じであるため、データの変換は必要ありません。どのバージョンのODBC Driver for Teradataでも、このデータを正常にバインドすることができ、値Aを返します。

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

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

Aは有効なSQL_INTEGER値ではないため、この変換は失敗します。バージョン16.10以前のODBC Driver for Teradataでは、代わりに出力データをSQL_CHARに変換してバインドすることで、このような問題を処理していました。16.20以降、ODBC Driver for Teradataは、SQL_INTEGERへのデータの変換を試行してから、SQL文22018の変換エラーを返します。

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

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

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

データベースの上限が6桁のため、指定できる最大桁数は6です。

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

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

SQLCancel

16.20以降、ODBC Driver for Teradataでは、ステートメントのタイミングまたは処理状態に対する応答が変更されました。

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

詳細については、<ODBC APIリファレンス>(https://msdn.microsoft.com/library/ms714112%28v=vs.85%29.aspx)の「SQLCancel関数」を参照してください。

バージョン16.10以前 16.20以降
ステートメントを非同期的に実行する場合、SQLCancelの呼び出し前に実行が完了するとODBC Driver for TeradataはHY008を返していました。 ODBC Driver for Teradataは、ステートメント実行の結果(SQL_SUCCESSまたはSQL_ERROR)を返します。
ステートメントの処理が実行される前にSQLCancelが呼び出された場合、ODBC Driver for Teradataは、ODBC 2.xモードとODBC 3.xモードのどちらで動作していても、そのステートメントをクローズしていました。

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

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

SQLForeignKeys

バージョン16.10以前のODBC Driver for Teradataでは、UPDATE_RULE列およびDELETE_RULE列は空の文字列として返されていました。16.20以降、これらの列はNULLとして返されるようになりました。

SQLGetConnectAttr

次の表は、さまざまなバージョンのODBC Driver for Teradataによって生成される結果を示しています。

機能 バージョン16.10以前 16.20以降
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

現時点では、バージョン16.20以降のODBC Driver for Teradataでは、以下の値の設定はサポートされていません。
  • SQL_DIAG_CURSOR_ROW_COUNT
  • SQL_DIAG_ROW_COUNT

SQLGetInfo

次の表は、さまざまなドライババージョンのODBC Driver for Teradataによって生成される結果を示しています。

機能 バージョン16.10以前 16.20以降
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

次の表は、さまざまなドライババージョンのODBC Driver for Teradataによって生成される結果を示しています。

機能 バージョン16.10以前 16.20以降
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
16.10以前のバージョンでは、ODBC Driver for Teradataは常にSQL_ROW_NUMBER_UNKNOWNを返します。16.20以降では、ODBC Driver for Teradataは結果セット全体における現在の行の実際の番号を返します。
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

バージョン16.10以前のODBC Driver for Teradataでは、TDODBC_DATA_TYPEはインデックス21に移動し、USER_DATA_TYPEはインデックス20に挿入されます。

16.20以降、ODBC Driver for Teradataはインデックス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

SQLProcedureColumns

16.10以前のバージョンのODBC Driver for Teradataでは、次のようになっています。
  • ドライバは、文字列の列にSQL_VARCHARを使用します。
  • TDODBC_DATA_TYPEはインデックス20から22に移動し、"IS RESULT SET COLUMN"とUSER_DATA_TYPEがインデックス20と21に挿入されます。

16.20以降、ODBC Driver for Teradataは文字列の列に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

SQLTables

ワイルドカード文字(%)を使用したパターン マッチングを行なう場合、デフォルトのカタログ メタデータはNULLです。16.20以降、ODBC Driver for Teradataは一部の列の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