ネイティブ SQL プロシージャーのパッケージのコピー作成
ネイティブ SQL プロシージャーを作成する際には、CREATE PROCEDURE ステートメントに指定したオプションを使用して、パッケージが暗黙的にバインドされます。 ネイティブ SQL プロシージャーが特定のアクションを実行する場合には、そのパッケージのコピーを明示的に作成する必要があります。
このタスクについて
ネイティブ SQL プロシージャーが次に示すアクションを 1 つ以上実行する場合は、そのプロシージャーのパッケージのコピーを作成する必要があります。
- CONNECT ステートメントを使用してデータベース・サーバーに接続する。
- 現行サーバーとは異なるロケーションを含む 3 部構成の名前を使用して表を参照する、またはそのような名前に解決される別名を参照する。
- CURRENT PACKAGESET 特殊レジスターを設定して、プロシージャーのそのバージョンに対してどのパッケージが呼び出されるかを制御する。
- CURRENT PACKAGE PATH 特殊レジスターを設定して、プロシージャーのそのバージョンに対してどのパッケージが呼び出されるかを制御する。
プロシージャーのバージョンに対応するパッケージの名前は、location.collection-id.package-id.version-id です。ただし、変数の値は次のとおりです。
- 場所
- CURRENT SERVER 特殊レジスターの値
- collection-id
- プロシージャーのスキーマ修飾子
- パッケージID
- プロシージャー名
- バージョンID
- バージョン ID
ネイティブ SQL プロシージャーのパッケージのコピーを作成するには、COPY オプションを指定して BIND PACKAGE コマンドを指定します。 現行サーバー上で作成されたコピーの場合は、別のスキーマ修飾子、つまりコレクション ID を指定します。 リモート・サーバー上で作成された最初のコピーに対しては、同じスキーマ修飾子を指定できます。 そのリモート・サーバー上で作成されたその他のコピーに対しては、別のスキーマ修飾子を指定します。
ネイティブ SQL プロシージャーを後で変更する場合は、プロシージャーのそのバージョンに対して存在するパッケージのローカル・コピー、またはリモート・コピーを明示的に再バインドする必要が生じることがあります。
例
- 例
- 次のネイティブ SQL プロシージャーは CONNECT ステートメントを含んでいるので、ターゲット・サーバーでパッケージのコピーを作成する必要があります。
この例では、サーバーはロケーション SAN_JOSE にあります。 その後の BIND コマンドにより、プロシージャー TEST.MYPROC のバージョン ABC に対応するパッケージのコピーが作成されます。 このパッケージはSAN_JOSEの場所に作成され、このプロシージャが実行されるときDb2に使用されます。
CREATE PROCEDURE TEST.MYPROC VERSION ABC LANGUAGE SQL ... BEGIN ... CONNECT TO SAN_JOSE ... END BIND PACKAGE (SAN_JOSE.TEST) COPY(TEST.MYPROC) COPYVER(ABC) ACTION(ADD) - 例
- 次のネイティブSQLプロシージャは、CURRENT PACKAGESET特殊レジスタを設定して、Db2このバージョンのプロシージャにコレクションIDCOLL2のパッケージを使用するようにします。 したがって、このようなパッケージを作成する必要があります。 後続の BIND コマンドは、コレクション ID COLL2 を指定してこのパッケージを作成します。 このパッケージは、プロシージャー TEST.MYPROC のバージョン ABC に対応するパッケージのコピーです。 Db2 このパッケージを使用して、このプロシージャ内のSQLステートメントを処理します。
CREATE PROCEDURE TEST.MYPROC VERSION ABC LANGUAGE SQL ... BEGIN ... SET CURRENT PACKAGESET = 'COLL2' ... END BIND PACKAGE(COLL2) COPY(TEST.MYPROC) COPYVER(ABC) ACTION(ADD) QUALIFIER(XYZ)