ネイティブ 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)