カタログ関数の中には、新ドライバと旧ドライバで動作が異なるものがあります。以下のセクションでは、こうした関数と、新ドライバと旧ドライバでの相違点について説明します。
カタログ関数 | 説明 |
---|---|
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-functionでSQLBindParameter関数のエラー情報を参照してください。
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-functionのSQLBindParameter関数を参照してください。
クエリー パラメータのバインド
新ドライバと旧ドライバでは、クエリー パラメータのバインドでサポートされるユース ケースが異なります。
旧ドライバ | 新ドライバ |
---|---|
旧ドライバは、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 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