バージョン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は、パラメータ セットで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の使用
- このパラメータがストアド プロシージャの呼び出しで指定されている場合、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 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
- 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
- ドライバは、文字列の列に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