SQL 解説書
パススルー と呼ばれる機能は、
あるデータ・ソースに固有の SQL のデータ・ソースを照会する場合に使用できます。
この節の内容は以下のとおりです。
- 連合サーバーと関連データ・ソースがパススルー・セッションで処理する SQL ステートメントの種類。
- パススルーを使用するときに留意すべき考慮事項と制約事項。
以下の規則により、
SQL ステートメントは DB2 とデータ・ソースのいずれかによって処理されます。
- パススルー・セッションで処理するように、
SQL ステートメントをデータ・ソースに実行依頼する場合、
その SQL ステートメントは、そのセッションで動的に準備され、
セッションがまだオープンしている間に実行されなければなりません。
これを行うには、以下のいくつかの方法があります。
- SELECT ステートメントを実行依頼する場合、PREPARE ステートメントを使用して準備してから、
OPEN、FETCH、および CLOSE ステートメントを使用して、照会の結果にアクセスします。
- SELECT 以外のサポートされているステートメントを使用する場合、以下のいずれかを行います。
- PREPARE ステートメントを使用して、サポートされているステートメントを準備してから、
EXECUTE ステートメントを使用して実行します。
- EXECUTE IMMEDIATE ステートメントを使用して、準備と実行を行います。
- パススルー・セッションで静的ステートメントが実行依頼された場合、
そのステートメントは連合サーバーに送られて処理されます。
- パススルー・セッション中に COMMIT または ROLLBACK コマンドが発行されると、
そのコマンドは現行の作業単位 (UOW) を完了させます。
パススルーに適用される考慮事項と制約事項は多岐にわたります。
一般的な性質のものもあれば、Oracle データ・ソースだけに関するものもあります。
以下の情報は、すべてのデータ・ソースに適用されます。
- パススルー・セッション内で準備したステートメントは、
同じパススルー・セッション内で実行しなければなりません。
パススルー内で準備したステートメントを、そのパススルー・セッション以外で実行すると、
失敗します (SQLSTATE 56098)。
- ユーザーおよびアプリケーションは
パススルーを使ってデータ・ソースへの書き込みを行えます。
たとえば、表の行を挿入、更新、削除できます。
注意点として、パススルー・セッションでデータ・ソース・オブジェクトに対して
カーソルを直接オープンすることはできません (SQLSTATE 25000)。
-
アプリケーションでは、実際にいくつかの SET PASSTHRU ステートメントを
異なるデータ・ソースに対して同時に使用できます。
アプリケーションが複数の SET PASSTHRU ステートメントを発行しても、
パススルー・セッションが実際にネストされるわけではありません。
連合サーバーはデータ・ソース間のパススルーを行いません。
むしろ、サーバーは、個々のデータ・ソースに直接アクセスします。
-
複数のパススルー・セッションが同時にオープンされる場合、
各セッション内の個々の作業単位は COMMIT または ROLLBACK ステートメントで終わる必要があります。
こうすればセッションを、
SET PASSTHRU ステートメントと RESET オプションを指定した 1 つの操作で終了することができます。
- 1 回に複数のデータ・ソースをパススルーすることはできません。
- パススルーは、ストアード・プロシージャーの呼び出しをサポートしません。
- パススルーでは、SELECT INTO ステートメントはサポートされていません。
以下の情報は、Oracle データ・ソースに適用されます。
- リモート・クライアントがコマンド行プロセッサー (CLP) から SELECT ステートメントを発行すると、
次の制約事項が適用されます。
すなわち、クライアント・コードが DB2 ユニバーサル・データベース バージョン 5 以前の DB2 SDK であれば、
SELECT は SQLSTATE 25000 を誘発します。
このエラーを回避したい場合、
リモート・クライアントはバージョン 5 以上の DB2 SDK を使用しなければなりません。
- Oracle サーバーに対して発行された DDL ステートメントは解析時に実行され、
トランザクションのセマンティクスには左右されません。
操作は完了した時点で Oracle によって自動的にコミットされます。
ロールバックが行われる場合、DDL はロールバックされません。
- 生データ・タイプから SELECT ステートメントを発行する場合は、
RAWTOHEX 関数を呼び出して 16 進値を受け取るようにします。
生データ・タイプに INSERT を実行する場合は、16 進表記で行います。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]