Db2 ODBC SQL と組み込み SQL の相違点
Db2 ODBC と組み込み SQL の間には大きな相違がありますが、Db2 ODBC では、組み込み SQL で動的に準備できる SQL ステートメントを実行することができます。
組み込み SQL インターフェースを使用するアプリケーションには、SQL ステートメントを コードに変換するためのプリコンパイラーが必要であり、 変換後そのコードはコンパイルされ、データ・ソースにバインド されて実行されます。 これに対して、Db2 ODBC アプリケーションは、プリコンパイルまたはバインドされる必要はありませんが、代わりに標準セットの関数を使用して実行時に SQL ステートメントと関連サービスを実行することができます。
従来、プリコンパイラーは、各データベース製品固有のものであり、 それによってその製品とアプリケーションとを事実上結び付ける役割を 果たしていたため、この違いは重要です。 Db2 ODBC では、特定のデータベース製品に依存しないポータブル・アプリケーションを作成することができます。 ODBC アプリケーションをプリコンパイルしないため、Db2 ODBC ドライバーは、ODBCを介して実行されるステートメントに、プリコンパイラー・オプションの固定セットを課します。 これらのオプションは、 一般的な ODBC アプリケーションを意図したものです。
この独立性により、 Db2 ODBC アプリケーションは、異なる Db2 またはDRDAデータソースにアクセスするために再コンパイルや再バインドを行う必要はなく、実行時に適切なデータソースに接続するだけで済みます。
- Db2 ODBC では、カーソルの明示宣言を必要としません。 必要に応じて、Db2 ODBC によって生成されます。 その後、アプリケーションは、通常のカーソル・フェッチ・モデルの生成済みカーソルを、 複数行の SELECT ステートメント、および位置付け UPDATE および位置付け DELETE ステートメントに使用できます。
- OPEN ステートメントは、Db2 ODBC では使用されません。 その代わりに、SELECT の実行によって自動的に カーソルがオープンされます。
- 埋め込みSQLとは異なり、 Db2 ODBC では、EXECUTE IMMEDIATEステートメント(
SQLExecDirect()関数)に相当するパラメータマーカーを使用することができます。 - Db2 ODBC における COMMIT または ROLLBACK は、SQL ステートメントとして渡すのではなく、
SQLEndTran()関数呼び出しを使用して発行されます。 - Db2 ODBC は、アプリケーションの代わりにステートメント関連情報を管理し、それを抽象オブジェクトとして参照するためのステートメント・ハンドルを提供します。 このハンドルによって、アプリケーションは製品固有のデータ構造を 使用する必要がなくなります。
- ステートメント・ハンドルと同様に、 環境ハンドル および接続ハンドル が、 すべてのグローバル変数および接続固有の情報を参照する方法として備えられています。
- Db2 ODBC は、X/Open SQL CAE 仕様によって定義された SQLSTATE 値を使用します。 フォーマットおよびほとんどの値は、 IBM® のリレーショナルデータベース製品で使用されている値と一致していますが、相違点もあります(一部の ODBC SQLSTATEおよびX/Open定義のSQLSTATEも異なります)。
これらの相違点にもかかわらず、組み込み SQL と Db2 ODBC には、Db2 ODBC は組み込み SQLで動的に準備可能な SQL ステートメントを実行できるという概念が共通しています。
表1は、各 Db2 for z/OS® SQLステートメントを列挙し、 Db2 ODBC でそのステートメントを実行できるかどうかを示しています。
各データベース管理システムには、動的に準備可能な追加のステートメントがある場合があります。この場合、Db2 ODBC はそれらをデータベース管理システムに渡します。
例外: 一部のデータベース管理システムでは、COMMIT および ROLLBACK を動的に準備することはできますが、
渡すことはありません。 COMMIT または ROLLBACK のいずれかを指定する代わり
に、SQLEndTran() 関数を使用する必要があります。
| SQL ステートメント | 動的1 | Db2 ODBC2 |
|---|---|---|
| ALTER TABLE | はい | はい |
| ALTER DATABASE | はい | はい |
| ALTER INDEX | はい | はい |
| ALTER STOGROUP | はい | はい |
| ALTER TABLESPACE | はい | はい |
| BEGIN DECLARE SECTION3 | いいえ | いいえ |
| CALL | いいえ | 可4 |
| CLOSE | いいえ | SQLFreeHandle() |
| COMMENT ON | はい | はい |
| COMMIT | はい | SQLEndTran() |
| CONNECT (タイプ 1) | いいえ | SQLConnect()、SQLDriverConnect() |
| CONNECT (タイプ 2) | いいえ | SQLConnect()、SQLDriverConnect() |
| CREATE { ALIAS, DATABASE, INDEX, STOGROUP, SYNONYM, TABLE, TABLESPACE, VIEW, DISTINCT TYPE } | はい | はい |
| DECLARE CURSOR3 | いいえ | SQLAllocHandle() |
| DECLARE STATEMENT | いいえ | いいえ |
| DECLARE TABLE | いいえ | いいえ |
| DECLARE VARIABLE | いいえ | いいえ |
| DELETE | はい | はい |
| DESCRIBE | いいえ | SQLDescribeCol(), SQLColAttribute() |
| DROP | はい | はい |
| END DECLARE SECTION3 | いいえ | いいえ |
| EXECUTE | いいえ | SQLExecute() |
| EXECUTE IMMEDIATE | いいえ | SQLExecDirect() |
| EXPLAIN | はい | はい |
| FETCH | いいえ | SQLFetch()、SQLExtendedFetch() |
| FREE LOCATOR4 | いいえ | はい |
| GET DIAGNOSTICS | いいえ | いいえ |
| GRANT | はい | はい |
| HOLD LOCATOR4 | いいえ | はい |
| INCLUDE3 | いいえ | いいえ |
| INSERT | はい | はい |
| LABEL ON | はい | はい |
| LOCK TABLE | はい | はい |
| MERGE5 | はい | はい |
| OPEN | いいえ | SQLExecute()、SQLExecDirect() |
| PREPARE | いいえ | SQLPrepare() |
| RELEASE | いいえ | いいえ |
| RENAME | はい | はい |
| REVOKE | はい | はい |
| ROLLBACK | はい | SQLEndTran() |
| select-statement | はい | はい |
| SELECT INTO | いいえ | いいえ |
| SET CONNECTION | いいえ | SQLSetConnection() |
| SET host_variable | いいえ | いいえ |
| SET CURRENT APPLICATION ENCODING SCHEME | いいえ | いいえ |
| SET CURRENT DEGREE | はい | はい |
| SET CURRENT PACKAGESET | いいえ | いいえ |
| SET CURRENT PATH | はい | はい |
| SET CURRENT SCHEMA | はい | はい |
| SET CURRENT SQLID | はい | はい |
| UPDATE | はい | はい |
| WHENEVER3 | いいえ | いいえ |
注:
|
||