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