1.1.2 ODBC 3.0対応

DBPARTNER ODBC 3.0 DriverはODBC 3.0のCore,及びLevel1,Level2の一部をサポートしたドライバです。ODBC 3.0はDAOやRDOを介して,従来に比べて高速なデータベースアクセスを実現します。OLE機能を持つデータベースの標準インタフェースであるADOやRDOにも対応しています。また,ODBC 3.0はODBC 2.xの機能を含んでいるため,ODBC 2.xアプリケーションからでも利用できます。

ODBC 3.0で導入された新機能を,現状では未サポートの機能を含め説明します。

<この項の構成>
(1) X/OpenとISOのCLIへの対応
(2) ODBC 2.x拡張機能
(3) ODBC 3.0 APIの拡張

(1) X/OpenとISOのCLIへの対応

ODBC 3.0は,X/OpenとISOのCLI(呼び出しレベルインタフェース)標準に従い,各標準をサポートしています。この二つの標準に対応した機能が幾つか追加されています。

(a) ディスクリプタ

ディスクリプタは,結果セットの列や,SQLステートメントの動的パラメタに関する情報を保存するデータ構造体です。ディスクリプタを使って,統一された方法で列やパラメタのデータに直接アクセスできるため,アプリケーションの様々な動作を効率化できます。ODBC 3.0で導入で拡張された機能の幾つかは,ディスクリプタによって実現されています。

(b) 診断

ODBC 3.0 では,関数を呼び出して取得した情報を診断領域に保存します。環境ハンドル,接続ハンドル,ステートメントハンドル,ディスクリプタハンドルのそれぞれに診断領域が確保されています。診断領域のヘッダフィールドには,関数の実行に関する一般的な情報が保存されます。診断領域のレコードフィールドには,ハンドルと関連付けられたODBC関数が返した最新のエラー又は警告に関する情報が保存されます。ODBC 3.0では,診断情報は次のように拡張されています。

(c) カタログ関数の列名

カタログ関数が返す結果セットの列名は,X/OpenとISOのCLI標準が定める列名に従っています。

(d) 新しい属性と関数

ODBC 3.0では,ODBC 2.xで使用していた「オプション」(接続オプション,ステートメントオプション)を「属性」(接続属性,ステートメント属性)と言い換えています。また,属性を取得,設定する関数も変更されています。

環境属性の導入
新しく環境属性が導入され,環境属性を取得,設定する関数が追加されました。
関数の追加
ディスクリプタフィールドと,診断フィールドを操作する関数が追加されました。また,環境属性,接続属性,及びステートメント属性を取得,設定する関数も追加されました。この新しい関数には,ODBC 2.xの接続オプションやステートメントオプションを設定する関数と同様に,バッファ長(設定関数取得関数)や出力文字列長(取得関数だけ)を指定する引数が追加されました。

(2) ODBC 2.x拡張機能

ODBC 2.xには,現行のX/OpenやISOのCLIの仕様にはない拡張機能(ディスクリプタと診断)が含まれていました。ODBC 3.0では,この拡張機能に対して新しくディスクリプタフィールドと診断フィールドが導入されました。ODBC 2.xの接続オプションとステートメントオプションは,ODBC 3.0では接続属性とステートメント属性になります。これは,用語がオプションから属性に変更されただけで,属性の役割はオプションと同じです。標準にはないODBC 2.xの機能のうち,ODBC 3.0のディスクリプタモデルに組み込まれたものを次に示します。

(3) ODBC 3.0 APIの拡張

ODBC 3.0では,標準に対応すると同時に,多くの新機能が追加され,API仕様も拡張されています。表 1-1にODBC 3.0 APIでの拡張機能とDBPARTNER ODBC 3.0 Driverのサポート状況を示します。表 1-1には,DBPARTNER ODBC 3.0 Driverでは未サポートの機能も含んでいます。

表1-1 ODBC 3.0 API での拡張機能とDBPARTNER ODBC 3.0 Driverでのサポート状況

追加された機能概要DBPARTNER ODBC 3.0 Driverでのサポート
新しいデータ型
  • 間隔データ型(SQL-92標準に定義された13種類の間隔データ型に対応するODBC SQL型識別子,間隔データが保存されるC間隔構造体,変換の指定,間隔リテラル形式の指定などを含む)がサポートされました。
  • 数値データと10進データを保存するC構造体が追加されました。
  • 64ビット整数を保存するODBC Cデータ型が追加されました。
バッチの実行アプリケーションは,バッチを実行するためにドライバからバッチの動作に関する詳細情報を取得できます。これによって,アプリケーションはバッチ処理を有効に活用し,パフォーマンスを活用できます。×
名前付きパラメタデータソースの多くは,ストアドプロシジャの呼び出しでの名前による動的パラメタの指定をサポートしています。ODBC 3.0では,名前付きパラメタのサポートを提供します。×
複数行のフェッチで発生したエラーの通知機能の拡張
  • ディスクリプタと診断に新しいフィールドが追加されたため,エラーが発生した行セットの列番号と行番号をアプリケーションで取得できます。
  • アプリケーションが行ステータス配列を調べることによって,簡単に警告とエラーを判断できる機能が追加されました。
パラメタ配列で発生したエラーの通知機能の拡張
  • パラメタ値の配列を指定したSQLステートメントの実行後に,行ステータス配列と同様の配列を使用できます。この配列は,パラメタ配列の各行に対して,実行後のステータスを示します。
  • パラメタ診断に,各エラーの「行」番号(配列内のパラメタセットの番号)と列番号に関する情報を格納するフィールドが追加されました。
SQLSetPosのSQL_ADDオプションの廃棄SQLSetPosのSQL_ADDオプションが使用できなくなり,新しい関数であるSQLBulkOperationsに追加されました。これによって,SQLSetPosの用途が簡潔になり,SQL_ADDオプションのために発生した特殊なケースがなくなりました。×
行の無視
  • SQLSetPos(SQL_UPDATEとSQL_DELETE)または
    SQLBulkOperations(SQL_ADD,SQL_UPDATE_BY_BOOKMARK及びSQL_FETCH_BY_BOOKMARK)を実行する際に,アプリケーションバッファで特定の行の無視を指定できます。
×
  • パラメタ配列を指定してステートメントを実行する際に,パラメタ配列で特定の行の無視を指定できます。
ブックマークの拡張
  • ODBC 3.0では,ブックマーク長の4バイトの制限がなくなり,可変長になりました。
  • ブックマークによるオフセット指向の行のフェッチができるようになりました。例えば,ブックマークが示す行から10行先の行をフェッチするなどの操作が実行できます。
  • 新しい関数であるSQLBulkOperationsによって,連続していない複数の行の更新,削除,フェッチができるようになりました。これまでSQLSetPosのSQL_ADDオプションで実行していた機能は,SQLBulkOperationsで実行できます。
×
バインドの拡張
  • アプリケーションは,バインドされたバッファのアドレスに固定オフセットの加算を指定するだけで,列やパラメタの再バインドを実行できます。
  • ODBC 2.xでは,結果セットの列に対する行方向,及び列方向バインドだけがサポートされていますが,ODBC 3.0では,パラメタの行方向及び列方向バインドができます。
SQLGetInfoの拡張
  • ドライバやデータソースがSQL-92をサポートしているかどうかを確認する情報型が追加されました。
  • 多くの情報型がカーソルの種類ごとに使用できます。
合致レベル新しい合致レベルはインタフェース要素のサポートに基づいています。ODBC 2.xの合致レベルは関数のサポートに基づいています。
SQL-92への対応ODBC 2.xでは,X/OpenのSQL仕様に基づいたSQL文法を提供しました。ODBC 3.0では,この文法が破棄され,SQL文法に関する記述はSQL-92に基づいています。同様にODBC SQLの合致レベルは使用できなくなり,現在,ドライバとデータソースについては,SQL-92に従う情報に置き換えられています。
データ型の情報ODBC 2.xの関数SQLColAttributesに代わるSQLColAttributeは,データ型の情報をこれまでより多く取得できます。
接続プール接続プールとは,アプリケーションが使うたびに再構築の必要がない接続をプールし,再接続の際に使用できる機能です。プールされた接続を使用すれば,接続時のオーバーヘッドを減らせます。これは,ネットワークを介して接続する中間層アプリケーションで有効となります。
(凡例)
○:DBPARTNER ODBC 3.0 Driverでサポートしている機能です。
×:DBPARTNER ODBC 3.0 Driverではサポートしていない機能です。
-:該当しません。
注※
パラメタ配列を使用する場合,次に示す制限があります。
  • DBPARTNER ODBC 3.0 Driverは複数の結果セットを生成するパラメタ配列(すなわちSELECTステートメントのパラメタ配列)をサポートしていません。
  • 接続データベース種別がVOS Kスプールファイルの場合はパラメタ配列を使えません。
  • ストアドプロシジャのパラメタ配列はサポートしていません。ストアドプロシジャの配列パラメタを実行すると,最初の1行だけが処理されます。