85 DBMS_HS_PASSTHROUGH
DBMS_HS_PASSTHROUGH
PL/SQLパッケージを使用すると、Oracleサーバーによる解釈がなくてもOracle以外のシステムに文を直接送信できます。この機能は、Oracle以外のシステムで使用できる文と同等の文がOracleにない場合に役立ちます。
この章では、以下のトピックについて説明します。
85.1 DBMS_HS_PASSTHROUGHの概要
PL/SQLパッケージDBMS_HS_PASSTHROUGH
を使用すると、パススルーSQL文をOracle以外のシステムで直接実行できます。このパッケージで実行される文は、標準のSQL文と同じトランザクションで実行されます。
参照:
このパッケージの詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』を参照してください。
85.2 DBMS_HS_PASSTHROUGHの操作上のノート
DBMS_HS_PASSTHROUGH
パッケージは仮想パッケージです。概念上は、Oracle以外のシステムに常駐します。ただし、実際には、このパッケージのコールは異機種間サービスにより仲介され、1つ以上の異機種間サービス・コールにマップされます。次に、これらの異機種間サービス・コールは、ドライバによりOracle以外のシステムのAPIにマップされます。クライアント・アプリケーションは、Oracle以外のシステムのストアド・プロシージャをコールする場合と同じ方法で、データベース・リンクを介してパッケージ内のプロシージャをコールする必要があります。異機種間サービスにより実行される特殊処理は、ユーザーに対して透過的です。
85.3 DBMS_HS_PASSTHROUGHサブプログラムの要約
この表は、DBMS_HS_PASSTHROUGH
サブプログラムを示し、簡単に説明しています。
表85-1 DBMS_HS_PASSTHROUGHパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
|
データ・タイプ |
|
|
|
データ・タイプ |
|
位置を基準にして |
|
|
|
SQL文がOracle以外のシステムで実行された後は、カーソルをクローズして、関連メモリーを解放します。 |
|
バインド変数を使用せずに、( |
|
( |
|
問合せから行をフェッチします。 |
|
|
|
|
|
Oracle以外のシステムでパススルーSQL文を実行するためのカーソルをオープンします。 |
|
Oracle以外のシステムでSQL文を解析します。 |
85.3.1 BIND_INOUT_VARIABLEプロシージャ
このプロシージャは、IN
OUT
バインド変数をバインドします。
構文
DBMS_HS_PASSTHROUGH.BIND_OUT_VARIABLE ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NULL, v OUT <dty>, n IN VARCHAR2);
<dty>
はDATE
、NUMBER
またはVARCHAR2
のいずれかです。
参照:
RAW
データ・タイプのOUT
変数のバインド方法については、「BIND_OUT_VARIABLE_RAWプロシージャ」を参照してください。
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-2 BIND_INOUT_VARIABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数の位置。1から始まります。 |
|
この値は次の2つの目的で使用されます。 - SQL文が実行される前にINの値を設定します。 - OUT値のサイズを判別します。 |
|
(オプション)バインド変数名。 たとえば、 |
例外
表85-3 BIND_INOUT_VARIABLEプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.2 BIND_INOUT_VARIABLE_RAWプロシージャ
このプロシージャは、データ・タイプRAW
のIN
OUT
バインド変数をバインドします。
構文
DBMS_HS_PASSTHROUGH.BIND_INOUT_VARIABLE_RAW ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NOT NULL, v IN OUT RAW, n IN VARCHAR2);
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-4 BIND_INOUT_VARIABLE_RAWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数の位置。1から始まります。 |
|
この値は次の2つの目的で使用されます。 - SQL文が実行される前にINの値を設定します。 - OUT値のサイズを判別します。 |
|
(オプション)バインド変数名。 たとえば、 |
例外
表85-5 BIND_INOUT_VARIABLE_RAWプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.3 BIND_OUT_VARIABLEプロシージャ
このプロシージャは、OUT
変数をPL/SQLプログラム変数にバインドします。
構文
DBMS_HS_PASSTHROUGH.BIND_OUT_VARIABLE ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NULL, v OUT <dty>, n IN VARCHAR2);
<dty>
はDATE
、NUMBER
またはVARCHAR2
のいずれかです。
参照:
RAW
データ・タイプのOUT
変数のバインド方法については、「BIND_OUT_VARIABLE_RAWプロシージャ」を参照してください。
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-6 BIND_OUT_VARIABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数の位置。1から始まります。 |
|
|
|
(オプション)バインド変数名。 たとえば、 |
例外
表85-7 BIND_OUT_VARIABLEプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.4 BIND_OUT_VARIABLE_RAWプロシージャ
このプロシージャは、データ・タイプRAW
のOUT
変数をPL/SQLプログラム変数にバインドします。
構文
DBMS_HS_PASSTHROUGH.BIND_OUT_VARIABLE_RAW ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NOT NULL, v OUT RAW, n IN VARCHAR2);
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-8 BIND_OUT_VARIABLE_RAWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数の位置。1から始まります。 |
|
|
|
(オプション)バインド変数名。 たとえば、 |
例外
表85-9 BIND_OUT_VARIABLE_RAWプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.5 BIND_VARIABLEプロシージャ
このプロシージャは、位置を基準にしてIN
変数をPL/SQLプログラム変数にバインドします。
構文
DBMS_HS_PASSTHROUGH.BIND_VARIABLE ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NOT NULL, v IN <dty>, n IN VARCHAR2);
<dty>
はDATE
、NUMBER
またはVARCHAR2
のいずれかです。
参照:
RAW
変数をバインドするには、BIND_VARIABLE_RAWプロシージャを使用してください。
プラグマ
Purity level defined: WNDS, RNDS
パラメータ
表85-10 BIND_VARIABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数の位置。1から始まります。 |
|
バインド変数名に渡す必要がある値。 |
|
(オプション)バインド変数名。 たとえば、 |
例外
表85-11 BIND_VARIABLEプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.6 BIND_VARIABLE_RAWプロシージャ
このプロシージャは、RAW
タイプのIN
変数をバインドします。
構文
DBMS_HS_PASSTHROUGH.BIND_VARIABLE_RAW ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NOT NULL, v IN RAW, n IN VARCHAR2);
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-12 BIND_VARIABLE_RAWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数の位置。1から始まります。 |
|
バインド変数に渡す必要がある値。 |
|
(オプション)バインド変数名。 たとえば、 |
例外
表85-13 BIND_VARIABLE_RAWプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.7 CLOSE_CURSORプロシージャ
このファンクションは、SQL文がOracle以外のシステムで実行された後に、カーソルをクローズし、関連メモリーを解放します。カーソルがオープンされていない場合、操作は何も行われません。
構文
DBMS_HS_PASSTHROUGH.CLOSE_CURSOR ( c IN BINARY_INTEGER NOT NULL);
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-14 CLOSE_CURSORプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
解放するカーソル |
例外
表85-15 CLOSE_CURSORプロシージャの例外
例外 | 説明 |
---|---|
|
|
85.3.8 EXECUTE_IMMEDIATEプロシージャ
このファンクションは、SQL文を即時実行します。有効なSQLコマンド(SELECT
を除く)をすぐに実行できます。
文にバインド変数を含めることはできません。文は引数でVARCHAR2
として渡されます。SQL文は、内部的には、OPEN_CURSOR
、PARSE
、EXECUTE_NON_QUERY
およびCLOSE_CURSOR
のPASSTHROUGH
SQLプロトコル・シーケンスを使用して実行されます。
構文
DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE ( s IN VARCHAR2 NOT NULL) RETURN BINARY_INTEGER;
パラメータ
表85-16 EXECUTE_IMMEDIATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
即時実行対象の文を含む |
戻り値
SQL文の実行によって影響を受ける行数。
例外
表85-17 EXECUTE_IMMEDIATEプロシージャの例外
例外 | 説明 |
---|---|
|
SQL文が正しくありません。 |
|
オープンしているカーソルが最大数に達しました。 |
|
|
85.3.9 EXECUTE_NON_QUERYファンクション
このファンクションはSQL文を実行します。SQL文にSELECT
文は使用できません。SQL文を実行する前に、カーソルをオープンし、SQL文を解析する必要があります。
構文
DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY ( c IN BINARY_INTEGER NOT NULL) RETURN BINARY_INTEGER;
パラメータ
表85-18 EXECUTE_NON_QUERYファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
戻り値
Oracle以外のシステムでSQL文によって影響を受ける行数。
例外
表85-19 EXECUTE_NON_QUERYファンクションの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
|
85.3.10 FETCH_ROWファンクション
このファンクションは、結果セットから行をフェッチします。
結果セットは、SQL SELECT
文で定義されます。それ以上フェッチする行がなくなると、例外NO_DATA_FOUND
が発生します。行をフェッチする前に、カーソルをオープンし、SQL文を解析する必要があります。
構文
DBMS_HS_PASSTHROUGH.FETCH_ROW ( c IN BINARY_INTEGER NOT NULL, f IN BOOLEAN) RETURN BINARY_INTEGER;
プラグマ
Purity level defined : WNDS
パラメータ
表85-20 FETCH_ROWファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
(オプション)
|
戻り値
フェッチされた行数が戻されます。最終行がすでにフェッチされている場合は、0(ゼロ)が戻されます。
例外
表85-21 FETCH_ROWファンクションの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
|
85.3.11 GET_VALUEプロシージャ
このプロシージャには、2つの目的があります。すなわち、行がフェッチされた後にSELECT
文の選択リスト項目を取得すること、およびSQL文が実行された後にOUT
バインド値を取得することです。
構文
DBMS_HS_PASSTHROUGH.GET_VALUE ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NOT NULL, v OUT <dty>);
<dty>
はDATE
、NUMBER
またはVARCHAR2
のいずれかです。
参照:
RAW
データ・タイプの値を取り出す方法については、「GET_VALUE_RAWプロシージャ」を参照してください。
プラグマ
Purity level defined : WNDS
パラメータ
表85-22 GET_VALUEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数または選択リスト項目の位置。1から始まります。 |
|
|
例外
表85-23 GET_VALUEプロシージャの例外
例外 | 説明 |
---|---|
|
最終行がフェッチされた後に、 |
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.12 GET_VALUE_RAWプロシージャ
このプロシージャはGET_VALUE
と同様ですが、データ・タイプRAW
に使用します。
構文
DBMS_HS_PASSTHROUGH.GET_VALUE_RAW ( c IN BINARY_INTEGER NOT NULL, p IN BINARY_INTEGER NOT NULL, v OUT RAW);
プラグマ
Purity level defined : WNDS
パラメータ
表85-24 GET_VALUE_RAWプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。カーソルは、ルーチン |
|
SQL文におけるバインド変数または選択リスト項目の位置。1から始まります。 |
|
|
例外
表85-25 GET_VALUE_RAWプロシージャの例外
例外 | 説明 |
---|---|
|
最終行がフェッチされた後に、 |
|
渡されたカーソルが無効です。 |
|
プロシージャが正しい順序で実行されません。(最初にカーソルをオープンし、SQL文を解析する必要があります)。 |
|
バインド変数の位置が有効範囲外です。 |
|
|
85.3.13 OPEN_CURSORファンクション
このファンクションは、Oracle以外のシステムでパススルーSQL文を実行するためのカーソルをオープンします。このファンクションは、すべてのタイプのSQL文に対してコールする必要があります。
後続のコールで使用する必要があるカーソルが戻されます。このコールによってメモリーが割り当てられます。関連付けられたメモリーの割当てを解除するには、プロシージャCLOSE_CURSOR
をコールします。
構文
DBMS_HS_PASSTHROUGH.OPEN_CURSOR RETURN BINARY_INTEGER;
プラグマ
Purity level defined : WNDS, RNDS
戻り値
後続のプロシージャおよびファンクション・コールで使用されるカーソル。
例外
表85-26 OPEN_CURSORファンクションの例外
例外 | 説明 |
---|---|
|
カーソルの最大オープン数を超えました。異機種間サービスの |
85.3.14 PARSEプロシージャ
このプロシージャは、Oracle以外のシステムでSQL文を解析します。
構文
DBMS_HS_PASSTHROUGH.PARSE ( c IN BINARY_INTEGER NOT NULL, stmt IN VARCHAR2 NOT NULL);
プラグマ
Purity level defined : WNDS, RNDS
パラメータ
表85-27 PARSEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パススルーSQL文に関連付けられたカーソル。ファンクション |
|
解析する文。 |
例外
表85-28 PARSEプロシージャの例外
例外 | 説明 |
---|---|
|
渡されたカーソルが無効です。 |
|
SQL文が正しくありません。 |
|
|