DFU Query SQL

26. カンタンにできる遠隔SQLの使用方法

DDM(分散データ管理)ファイルを使用すると遠隔地の別のiSeries400のデータ・ベースを
あたかも構内(ローカル)のiSeries400にあるかのように透過的に扱うことができる。

例えば東京本社にあるiSeries400からSNA接続されている福岡支社のiSeries400の
データ・ベースをRPGで直接、READすることができる。
しかしこの便利な機能も SQLでは直接には処理することはできない。
そこで遠隔SQLのちょっとしたコツをご紹介する。
例として

のように構成されているものとする。

TKYLIB/FUKURIDDMDDMファイルであり、実体は福岡支社の FUKLIB/URIAGE
である。この福岡支社に存在している売上ファイル(TKYLIB/FUKURIDDM) はDDM である
ので、DDM の特質からすると東京本社のiSeries400上で

SELECT * FROM TKYLIB/FUKURIDDM

として処理できそうに思えるが、この方法では「TKYLIB/FUKURIDDM はデータ・ベース
ではありません。」
とのエラーとなってしまう。
SQLの仕様ではDDMは扱えないことになっているからである。
しかし結論からお話すると以下のようにすれば、遠隔SQLとして処理が可能となる。

CONNECT FUKUOKA USER QUSER USING USER123
SELECT * FROM FUKLIB/URIAGE
【 説明 】

1.遠隔リレーショナル・データベースへの接続

CONNECT によって福岡のリレーショナル・データベースへ最初に接続する。
SQLではリレーショナル・データベースという実に紛らわしい用語を使うがこれは
SQLがアクセスできる空間と考えてよい。
言葉から想像するような特定のデータ・ベースやファイルのことを意味しているのではない。
省略値のリレーショナル・データベース(以下RDBと略)とは*LOCAL であるが、福岡の
RDBである「FUKUAKA」に接続すると福岡支社のDDMファイルが東京本社でも処理
できるようになる。

CONNECT文は

CONNECT [RDB] USER [ユーザー名] USING [パスワード]

の形式で福岡へのiSeries400へログインして接続を開始する。
ただしRPGで福岡のDDM を処理するにはDDMさえあれば何の設定も要らないがSQL の
場合は相互に RDB を結んでおく必要がある。

のように構成しておく必要がある。

福岡支社の*LOCAL RDB の名前に対して東京では同じ名前のRDB を*REMOTE
(実際には *REMOTEというパラメーターは無いがわかりやすくするために遠隔地という意味
でここでは *REMOTE とした。)
で登録しておく。

福岡支社で WRKRDBDIRE + [実行]

「リレーショナル・データベース・ディレクトリー 項目の処理」

を起動すると次のような画面が表示される。

OS/400 V4R4M0 以降であればOS/400自身によって導入時にこのように *LOCAL
RDB が既に登録されているはずである。
これによって福岡支社の *LOCAL の RDBの名前を知ることができる。
もし登録が無ければ オプション=1*LOCAL のRDB を登録しておく。

次に東京では同じように WRKRDBDIRE + [実行]「1= 追加」によって福岡のRDB を
登録する。下記はその様子である。

2. SQL文の実行

CONNECT によって遠隔RDB への接続が完了すればDDMファイルは構内にあるものとして
処理することができる。
ただし

SELECT * FROM FUKLIB/URIAGE

としてわかるように東京本社のDDMファイル: TKYLIB/FUKURIDDM の名前を指定するのではなく、
福岡支社のファイル名 : FUKLIB/URIAGE を指定するのである。
ここが一般のDDMの扱いとは異なる点である。

【 まとめ 】

以上でおわかりのように遠隔SQL は

  • 遠隔RDB を WRKRDBDIRE または ADDRDBDIRE で定義して
  • CONNECT で遠隔RDB に接続
  • SELECT などで直接、相手の名前を指定する。

というコツさえわかってしまえば実にカンタンなものであるがSQL解説書などでは説明が適切で
ないため、なかなか遠隔SQLが馴染みの薄いものとなってしまっている。
最後に、この技術は Panel-Worker Chicago Ver5.1 に使用されていることを付記しておく。