アプリケーション開発の手引き
パススルー という機能を使用して、各データ・ソースに固有のデータ・ソースを SQL で照会できます。この節では、以下の事柄を扱います。
- 連合サーバーおよびそれに関連するデータ・ソースが、パススルー・セッションでどのような SQL ステートメントを処理するかを説明します。
- パススルーを使用する際に注意すべき考慮事項および制約事項をリストします。
SQL ステートメントが DB2 とデータ・ソースのどちらによって処理されるかは、以下の規則で指定されます。
- パススルー・セッションで静的ステートメントの処理依頼が行われると、そのステートメントは処理するため連合サーバーに送信されます。
- データ・ソースに対する SQL ステートメントの処理依頼をパススルー・セッションで行う場合には、そのステートメントをセッションで動的に準備して、セッションがまだ開いている間にステートメントを実行する必要があります。
- SELECT ステートメントを実行依頼する場合には、
PREPARE ステートメントと一緒に準備し、それから OPEN、FETCH、および CLOSE ステートメントを使用して、照会結果にアクセスします。
- SELECT 以外でサポートされているステートメントの場合、
2 つのオプションがあります。
- PREPARE ステートメントを使ってサポートされているステートメントを準備し、
EXECUTE ステートメントを使ってそのステートメントを実行する。
- EXECUTE IMMEDIATE ステートメントを使って、そのステートメントを準備して実行する。
-
パススルー・セッション中に COMMIT または ROLLBACK コマンドを発行した場合、このコマンドは現行の作業単位 (UOW) を完了します。
パススルーを使用する際には、いくつかの考慮事項および制約事項に注意する必要があります。一般的な性質のものもあれば、
Oracle データ・ソースだけに適用される事項もあります。
以下の情報はすべてのデータ・ソースに適用されます。
- パススルー・セッションで準備したステートメントは、同一のパススルー・セッションで実行する必要があります。パススルー・セッションで準備したステートメントを、同一のパススルー・セッション以外で実行すると、失敗します (SQLSTATE 56098)。
- パススルーはデータ・ソースへの書き込みに使用できます。たとえば、表の行の挿入、更新、および削除に使用できます。しかし、パススルー・セッションでは、
UPDATE および DELETE ステートメントで WHERE CURRENT OF 条件を使用できないことに注意してください。
-
1 つのアプリケーションで、異なるデータ・ソースに有効な SET PASSTHRU ステートメントを同時に複数持つことができます。アプリケーションが複数の SET PASSTHRU ステートメントを発行したとしても、パススルー・セッションは実際にはネストされません。連合サーバーは、あるデータ・ソースから別のデータ・ソースにアクセスするためにパススルーすることはありません。むしろ、サーバーはそれぞれのデータ・ソースに直接アクセスします。
-
複数のパススルー・セッションが同時にオープンしている場合には、それぞれのセッションで作業単位を終了するたびに必ず COMMIT を発行してください。すると、セッションを終了する必要があるときには、
SET PASSTHRU RESET ステートメントを 1 回実行するだけで、これを行えます。
- パススルー・セッションで SQL ステートメントに定義されるホスト変数は、
Hn の形式を取ります。ここで、
H は大文字であり、n は固有の整数です。
n の値は、ゼロで始まる連続番号でなければなりません。
- 一度に複数のデータ・ソースはパススルーできません。
- パススルーはストアード・プロシージャー呼び出しをサポートしません。
- パススルーでは、SELECT INTO ステートメントはサポートされていません。
以下の情報は Oracle データ・ソースに適用されます。
- 以下の制約事項は、リモート・クライアントがコマンド行プロセッサー (CLP) からパススルー・モードで SELECT ステートメントを発行する際に適用されます。クライアント・コードが DB2 ユニバーサル・データベース バージョン 5 以前の DB2 アプリケーション開発クライアントである場合には、
SELECT は SQLCODE -30090 と理由コード 11 を出します。このエラーを避けるためには、リモート・クライアントがバージョン 5 またはそれ以上の DB2 アプリケーション開発クライアントを使用する必要があります。
- Oracle サーバーに対して発行される DDL ステートメントはすべて解析時に実行されるので、トランザクションのセマンティクスには従いません。操作は、終了時に Oracle によって自動的にコミットされます。ロールバックが発生しても、DDL はロールバックされません。
- 生データ・タイプから SELECT ステートメントを発行する際には、
RAWTOHEX 関数を使用して 16 進値を受け取ります。生データ・タイプへの INSERT を実行する場合には、16 進数表示を使用します。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]