外部 SQL プロシージャーのネイティブ SQL プロシージャーへのマイグレーション

既存のプロシージャーをドロップし、ネイティブ SQL プロシージャーとして再作成することによって、既存の外部 SQL プロシージャー(非推奨) をネイティブ SQL プロシージャーにマイグレーションすることができます。 ネイティブ SQL プロシージャーは、より完全にサポートされており、保守が容易であり、通常は非推奨の外部 SQL プロシージャーよりも効率よく実行されます。

始める前に

Db2前のリリースで外部SQLプロシージャを作成した場合、ストアドプロシージャを使うアプリケーションのリリースの非互換性を考慮し、外部SQLプロシージャのソースコードを調べて、必要な調整を行ってください。 アプリケーションとSQLリリースの非互換性についてはこちらをご覧ください。

このタスクについて

ネイティブ SQL プロシージャーとは、本体全体が SQL で記述されているプロシージャーです。 この本体は、SQL プロシージャー型言語 (SQL PL) で作成されています。 ネイティブ SQL プロシージャーを作成するには、1 つの SQL ステートメント (CREATE PROCEDURE) を発行します。 ネイティブ SQL プロシージャーでは、プログラムによるその他の準備 (ソース・コードのプリコンパイル、コンパイル、リンク・エディットなど) は不要です。 ネイティブSQLプロシージャは、 Db2 パッケージにバインドされたSQLステートメントとして実行されます。 ネイティブ SQL プロシージャーは、外部アプリケーション・プログラムに関連付けられていません。 ネイティブ SQL プロシージャーは、より完全にサポートされており、保守が容易であり、通常は非推奨の外部 SQL プロシージャーよりも効率よく実行されます。

外部 SQL プロシージャーは、その本体全体が SQL で作成されているプロシージャーです。 この本体は、SQL プロシージャー型言語 (SQL PL) で作成されています。 ただし、外部 SQL プロシージャーは、その他の外部ストアード・プロシージャーと同じように作成され、インプリメントされ、実行されます。

プロシージャー

外部SQL プロシージャーをネイティブ SQL プロシージャーに移行するには、以下の手順を実行します。

  1. 既存の外部 SQL プロシージャーに対する既存の CREATE PROCEDURE ステートメントと GRANT EXECUTE ステートメントを見つけて保存します。
  2. DROP PROCEDURE ステートメントを使用して、既存の外部 SQL プロシージャーをドロップします。
  3. 最初にそのプロシージャーを作成するときに使用したものと同じ CREATE PROCEDURE ステートメントを使用して、プロシージャーをネイティブ SQL プロシージャーとして再作成します。以下の変更を両方とも適用します。
    • プロシージャーがオプション FENCED または EXTERNAL を使用して定義されている場合は、これらのキーワードを除去します。
    • WLM ENVIRONMENT キーワードの除去、または FOR DEBUG MODE 節の追加のいずれかを行います。
    • プロシージャー本体に、列または SQL 変数またはパラメーターのいずれかを参照する可能性がある非修飾名を持つステートメントが含まれている場合は、これらの名前を修飾してください。 そうしないと、ステートメントの変更が必要になる可能性があります。

      Db2 は、プロシージャーが外部 SQL プロシージャーであるか、ネイティブ SQL プロシージャーであるかによって、これらの名前を異なる方法で解決します。 外部 SQL プロシージャーの場合、Db2 は最初にその名前を変数またはパラメーターとして扱います ( その名前が存在する場合 ) 。 ネイティブSQLプロシージャーの場合、Db2その名前の列が存在する場合、最初にその名前を列として扱います。 例えば、以下のステートメントを検討してみましょう。

      CREATE PROCEDURE P1 (INOUT C1 INT) ... SELECT C1 INTO xx FROM T1

      前の例で、P1 が外部 SQL プロシージャーである場合、C1 はパラメーターです。 ネイティブ SQL プロシージャーの場合、C1 は表 T1 の列です。 そのような列が存在しない場合、C1 はパラメーターです。

  4. 最初にこのストアード・プロシージャーに特権を付与するときに使用したものと同じ GRANT EXECUTE ステートメントを発行します。
  5. ストアード・プロシージャーを呼び出すアプリケーションの JOB ステートメントの TIME パラメーターの値を増やします。
    重要: この変更は、SQL外部ストアドプロシージャの実行時間はWLMアドレス空間に課金されるのに対し、ネイティブSQLストアドプロシージャの実行時間はタスクのアドレス空間に課金されるため、必要な変更です。
  6. 新しいネイティブ SQL プロシージャーをテストします。