DFU Query SQL

27. 遠隔SQL と SQLパッケージの関係とは

「26. カンタンにできる遠隔SQLの使用方法」で遠隔SQLもカンタンに使用できることが
おわかり頂けたと思う。
それではRPG、COBOLやC/400にSQL文を埋め込んだSQLパッケージの開発者はこれも
カンタンと考えては早計となる。
SQLパッケージの場合は少々考慮が必要となるので、ここで解説する。
例えば、RPGの場合であれば、もう一度コンパイルのパラメーターを思い出して欲しい。
次はあるSQLを梱包したコンパイルの指示画面である。

ここで「リレーショナル・データベース」パラメータの省略値は「*LOCAL」となっていることに
注目して頂きたい。
*LOCAL では遠隔地のRDBには接続することはできない。
遠隔地のRDBに接続できるようにするには次の2つの方法がある。

  1. CRTSQLxxx でRDB に遠隔地RDB を指定してコンパイルする。
  2. SQLPKG を別に遠隔地RDBを指定して作成する。

1.の方法は極めてカンタンである。これによってRPG のSQL文の内部に CONNECT文を
埋め込んでおけば有効となりRPG内部で遠隔地に接続することができる。

しかしこの方法では予め遠隔RDBの名前がわかってかなければならない。
複数の接続先への対応やソフトウェア製品としてSQLパッケージを配布したいときはこの方法
では無理である。
ソースを配布して客先で再コンパイルしてくださいと言うわけにはいかないであろう。

2.の方法がその解決案である。
もう一度、CRTSQLxx コマンドの続きのパラメータを見てみよう。

パッケージ/ライブラリーのパラメータに注目して欲しい。
このパラメータが *PGM/*PGMLIB となっているのは

「このSQLPKG があればここから情報を取得します」

という意味である。
つまり CRTSQLxxx で生成された *PGM としてのオブジェクト以外に *SQLPKG という
オブジェクトも参照できるという意味である。
CRTSQLPKG コマンドによって CRTSQLxxx によって作成された *PGM から *SQLPKG
を生成し、生成段階では任意の RDB を指定することができるのである。
次の画面はその様子である。

つまり *PGM としてのオブジェクトさえ配布しておけば配布先のユーザーではオブジェクト
*PGM からRDBを指定した *SQLPKGを生成してもらえばソースを配布しなくても
指定した任意の遠隔RDB に接続できるようになる。

Panel-Worker Chicago Ver5.1「遠隔地RDBの登録」ではこのように内部で
CRTSQLPKG コマンドを実行して *SQLPKG を生成している。
このように通常は CRTSQLxxx*PGM の単独で動作するものも *SQLPKG
組み合わせることによって動的な機能拡張を行うことができる。