はじめに
皆さんは、データベースのレコードの読取処理を行う際、どのようにレコードにキーセットを行っていますか?
レコードの読取開始位置が決まっていない場合、*LOVAL ・*HIVAL を使用して、データベースの先頭や終わりからレコードを参照することが多いのではないでしょうか。
今回は、それらの代わりに*START・*END の予約語を用いてキーセットする方法についてご紹介します。
使用例
データイメージ
TESTF は、No. をキーに昇順に並んでいる物理ファイルです。
TESTF
No. | 名前 | 五十音順 No. |
---|---|---|
1 | 佐藤一郎 | 4 |
2 | 佐藤次郎 | 6 |
3 | 佐藤三郎 | 5 |
4 | 伊藤一郎 | 1 |
5 | 伊藤次郎 | 3 |
6 | 伊藤三郎 | 2 |
TESTL01 は、TESTF の論理ファイルです。データは、五十音順 No.をキーに降順に並んでいます。
以下、上記のデータを用いた使用例並びに実行結果です。
昇順のキーの例
TESTF
A* レコード名
A R TESTR TEXT(' テストファイル ')
A*
A* キー(データの順序
A K TESTNBR
昇順の場合のソースコード例
TEST001R
C MOVEL(P) *BLANK NUMBER 1
C MOVEL(P) *BLANK RESULT 40
C *START SETLL TESTF
C READ TESTR 90
C 90 GOTO #END
C MOVE TESTNBR NUMBER
C EVAL RESULT = ' № '
C + %TRIMR(NUMBER )
C + ' は '
C + %TRIMR(TESTNAME )
C + ' です '
C RESULT DSPLY
C*
C MOVEL(P) *BLANK NUMBER
C MOVEL(P) *BLANK RESULT
C *END SETLL TESTF
C READP TESTR 90
C 90 GOTO #END
C MOVE TESTNBR NUMBER
C EVAL RESULT = ' № '
C + %TRIMR(NUMBER )
C + ' は '
C + %TRIMR(TESTNAME )
C + ' です '
C RESULT DSPLY
実行結果
降順のキーの例
TESTl01
A* レコード
A R TESTR PFILE(TESTF )
A* KEY
A K TESTKANA DESCEND
降順の場合のソースコード例
TEST001R
C MOVEL(P) *BLANK NUMBER
C MOVEL(P) *BLANK RESULT
C *START SETLL TESTL01
C READ TESTR01 90
C 90 GOTO #END
C MOVE TESTKANA NUMBER
C EVAL RESULT = ' 五十音順№ '
C + %TRIMR(NUMBER )
C + ' は '
C + %TRIMR(TESTNAME )
C + ' です '
C RESULT DSPLY
C*
C MOVEL(P) *BLANK NUMBER
C MOVEL(P) *BLANK RESULT
C *END SETLL TESTL01
C READP TESTR01 90
C 90 GOTO #END
C MOVE TESTKANA NUMBER
C EVAL RESULT = ' 五十音順№ '
C + %TRIMR(NUMBER )
C + ' は '
C + %TRIMR(TESTNAME )
C + ' です '
C RESULT DSPLY
実行結果
注意点
- SETLL の命令のみで使用可能
レコード末尾に読取開始位置をセットするとき、感覚的に SELGT を使いそうですが、*END を使う場合、SETGT ではコンパイルエラーとなってしまうので、SETLL を使用する必要があります。 - 演算項目 2 には、ファイル名を指定
SETLL では、ファイル名かレコード名を指定が可能ですが、演算項目 1 にSTART やEND を指定する際は、ファイル名の指定しなければなりません。
終わりに
今回は、*START・*END を使用したレコードの読取開始位置の設定方法についてご紹介させていただきました。
何点か注意しなければならない点がありますが、*LOVAL・*HIVALとは異なり、データが昇順、降順であることに影響を受けることなく、レコードの先頭または末尾にキーセットすることが可能となります。
最後までお読みいただきありがとうございました。ご参考になれば幸いです。