DDM(分散データ管理)ファイルを使用すると遠隔地の別のiSeries400のデータ・ベースを
あたかも構内(ローカル)
のiSeries400にあるかのように透過的に扱うことができる。
例えば東京本社にあるiSeries400からSNA接続されている福岡支社のiSeries400の
データ・ベースをRPGで直接、READすることができる。
しかしこの便利な機能も SQLでは直接には処理することはできない。
そこで遠隔SQLのちょっとしたコツをご紹介する。
例として
のように構成されているものとする。
TKYLIB/FUKURIDDM は DDMファイルであり、実体は福岡支社の 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 に使用されていることを付記しておく。