AS400 IT備忘録

AS400/IBMi OPNQRYFでJOINを使ってみる

投稿日:

前置き

私が思い出すための備忘録なので間違いがあるかもです。

逆にこういう使い方があるよというのがあれば教えてほしいです。

 

やりたいこと

SYOHINという商品マスタがあり、IDとしてDAI/CYU/RENという3つのフィールドをキーとして運用している。DAIは大カテゴリ、CYUは中カテゴリ、RENは連番だ。

その3つのキーでWRITEもUPDATEも並び替えも商品のカテゴリ分けもすべてやっているもんだから、並びもグチャグチャ、カテゴリ分けもグチャグチャ。

なので並び替えは別フィールドを設けてそちらでやろうとした。

RENの並びを替えたいので、DAI/CYU/並びという形にしたい。

カラムを追加してひたすら並び順にコードを登録していった。

 

しかし並び替えのフィールドはあくまで商品マスターの話であって、別のZAIKOという在庫マスターには無い。作ればいいだけなのだけど同期しなければならないし、正規化という意味ではなんか違うと思う。

そういうときに限って、在庫マスターを商品マスターと同じように、いい感じに並べて表示したいという要望がある。

在庫マスタを主にして、商品マスタをCHAINしても商品マスタにあるカラムで並び替えることはできない。

といって運用上、商品マスタを主にするわけにもいかない。

しかも論理ファイルを作ってJOINするわけにもいかない。なぜなら結合される側のカラムを論理ファイルのキーにすることは出来ないのだ。

 

 

あー面倒くさい!!

 

これSQLなら瞬殺なんだけどなぁ。

AS400はキーとか読み順とかマジで面倒くさい。

 

なので、色々調べてOPNQRYFをしてみた。

 

書いたコード

サンプルクソコードです。

OVRDBF FILE(ZAIKO) SHARE(*YES)
OVRDBF FILE(SYOHIN) SECURE(*YES)

OPNQRYF FILE((ZAIKO *FIRST *ONLY) +
(SYOHIN *FIRST *ONLY)) +
FORMAT(ZAIKO) +
QRYSLT(‘USE = 1’) +
KEYFLD((ZAIKO/DAI *ASCEND *N) +
(ZAIKO/CYU *ASCEND *N) +
(SYOHIN/NARABI *ASCEND *N) +
(ZAIKO/REN *ASCEND *N)) +
JFLD((ZAIKO/ZDAI SYOHIN/SDAI *EQ) +
(ZAIKO/ZCYU SYOHIN/SCYU *EQ) +
(ZAIKO/ZREN SYOHIN/SREN *EQ))

 

OVRDBFはよく解らない。OPNQRYFをやるときの儀式だと思ってる。

OPNQRYFのFILEはファイルの指定。2つJOINするときはこう書くみたい。

*FIRSTと*ONLYはメンバー絡みの指定だと思われ。

FORMATもよく解らない。

QRYSLTはSQL文のWHEREと同じ。USE=”1″が使っているものの意味なんで、こう指定している。

KEYFLDは並び順。DAI/CYU/並び/RENにしてみた。*ASCENDは昇順の意味。

JFLDがJOINのONに当たる部分。

 

使用してみて

しかしこれ、どっちのファイル名を指定すればいいんだ?

と思う前に、ZAIKOを指定すれば普通にRPGで読めた。しかも確かに並び順は替わっている。

なるほどこれは使える。

だが、もともとZAIKOを読むRPG内でSETLLとかREADEとかCHAINをしていたものが、使えなくなってしまった。というのはKEYが変わってしまったから。

やはり並び順だけ変えたいというのは難しいようだ。

 

一応なんとかやりくりして使えるようにしたけど、他にいい方法が無いか悩む。ちなみにOPNQRYFからF4でプロンプトを出せば引数や引数の意味は見つけやすいかもです。

 

他に何か進展したら追記します。

 

スポンサーリンク




スポンサーリンク




-AS400, IT備忘録

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

AS400/IBMi キー操作やファンクションキーまとめ

備忘録です。追記していきますので書きかけです。   ファンクションキーまとめ   半角カナの文字化け 半角カナが文字化けしているときがある。文字コードの変換のショートカットキーらし …

AS400/IBMi ファイルの簡単編集 UPDDTA

STRDFUなど使って事細かく設定DFUファイルを作らなくても、深く考えずに編集するだけなら UPDDTA ライブラリ名/ファイル名 を使えば、すぐ編集画面に飛ぶ。編集方法はDFUと同じ。

AS400/IBMi RunSQLScriptsでエクセルExcelやCSVでダウンロード

SQLを使いだすと便利ですね。QRY400とかdtfでやるより自分の思ったとおりに抽出できる。 でもそのままエクセルに吐き出せないのかなと思ったらやり方が英語であったので備忘録にしておく。 ちなみに最 …

WordPressサイトにBasic認証を追加

WordPressサイトだけってわけじゃないけど、Basic認証を追加する方法。 ディレクトリ構成は、/var/www/cms/wp-adminなどのwpディレクトリファイル群 とする。LAMP環境だ …

AS400/IBMi デバグ・デバッグ STRISDBの気づき

自分備忘録です。使い方よく解りません。逆に教えてほしいくらいです。 なんでそんなことするの?バカなの?死ぬの?そう思った方は教えて下さい(笑) 他にもこんな便利な機能使ってないの?というのも大歓迎です …

Adsense広告


文字で検索

人気記事

なぜだか人気記事