SQL および外部のルーチン・オブジェクトの管理

SQL および外部の関数およびプロシージャーは、システム・プログラムおよびサービス・プログラムを使用して実装されます。これらのオブジェクトは、正しく管理すれば、QSYS2/SYSROUTINES、QSYS2/SYSPARMS、および QSYS2/SYSROUTINEDEP システム・カタログでルーチン登録を再生成できます。

SQL プロシージャーまたは関数が作成または変更されると、ILE C プログラムまたはサービス・プログラムが生成されます。このオブジェクトには、実行可能ステートメントが含まれている他、SQL ルーチンとして定義するために使用されるすべての情報が含まれています。

外部プロシージャーまたは関数が作成され、ILE プログラムまたはサービス・プログラム・オブジェクトに関連付けられると、ルーチン定義に関する情報が、*PGM または *SRVPGM オブジェクトに保存されます。ルーチン情報をオブジェクトに正常に追加すれば、オブジェクトの保守で必要になる手動作業が低減します。

外部プロシージャーまたは関数定義は、以下の場合にのみ保存できます。
  • 外部プログラムが ILE *PGM または *SRVPGM オブジェクトである。
  • プログラムまたはサービス・プログラムが QSYS、QSYS2、SYSIBM、SYSPROC、および SYSIBMADM 内にない。
  • CREATE PROCEDURE または CREATE FUNCTION ステートメントの発行時にプログラムが存在し、プログラムが見つかる。
  • CREATE または ALTER ステートメントがプログラムに対する排他ロックを取得できる。
  • プログラムに 32 ルーチンの属性がまだ含まれていない。

外部ルーチンの作成、変更、または除去時にメッセージ SQL7909 が発行され、*PGM および *SRVPGM を変更することができません。 このメッセージには、理由コードが含まれています。

これらのプロシージャーおよび関数の *PGM および *SRVPGM オブジェクトが他のシステム・オブジェクトと同様に管理されている場合、SYSROUTINES および SYSPARMS カタログ情報を保守するために、オブジェクトに保存されている情報が使用されます。 以下の CL コマンド (およびそれに対応する API) により、カタログが、プロシージャーおよび関数の実行可能オブジェクトと同期された状態に保たれます。
保存/復元 (SAVOBJ/RSTOBJ および SAVLIB/RSTLIB)
ルーチンごとに 1 行が SYSROUTINES カタログに挿入されます。 EXTERNAL_NAME 列には、新規に復元された実行可能オブジェクトの名前が含まれます。
複製オブジェクト作成 (CRTDUPOBJ)
新規行が SYSROUTINES カタログに挿入されます。EXTERNAL_NAME 列には、新規に複製された実行可能オブジェクトの名前が含まれます。
ライブラリー・コピー (CPYLIB)
新規行が SYSROUTINES カタログに挿入されます。EXTERNAL_NAME 列には、新規に複製された実行可能オブジェクトの名前が含まれます。
オブジェクト名変更 (RNMOBJ)
SYSROUTINES の既存行が変更されます。EXTERNAL_NAME 列には、名前変更された実行可能オブジェクトの名前が含まれます。
オブジェクトの移動 (MOVOBJ)
SYSROUTINES の既存行が変更されます。EXTERNAL_NAME 列には、移動された実行可能オブジェクトの名前が含まれます。
ライブラリー消去 (CLRLIB)
SPECIFIC_SCHEMA 列が消去対象ライブラリーの名前に一致している SYSROUTINES 内のすべての行が削除されます。
プログラム削除 (DLTPGM) およびサービス・プログラムの削除 (DLTSRVPGM)
SQL ルーチンの場合、SPECIFIC_NAME および SPECIFIC_SCHEMA 列を使用して、SYSROUTINES 内の対応する行が削除されます。外部ルーチンの場合、更新は行われません。

システム・コマンドの使用時に *PGM または *SRVPGM が操作されると、メッセージ SQL9015 が発行され、関連ルーチンのカタログ・エントリーを更新できません。