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 に使用されていることを付記しておく。