LoginSignup
1
0

More than 1 year has passed since last update.

*START・*ENDを用いたキーセット

Last updated at Posted at 2022-12-24

はじめに

皆さんは、データベースのレコードの読取処理を行う際、どのようにレコードにキーセットを行っていますか?

レコードの読取開始位置が決まっていない場合、*LOVAL ・*HIVAL を使用して、データベースの先頭や終わりからレコードを参照することが多いのではないでしょうか。

今回は、それらの代わりに*START・*END の予約語を用いてキーセットする方法についてご紹介します。

使用例

データイメージ

TESTF は、No. をキーに昇順に並んでいる物理ファイルです。

TESTF

No. 名前 五十音順 No.
佐藤一郎 4
佐藤次郎 6
佐藤三郎 5
伊藤一郎 1
伊藤次郎 3
伊藤三郎 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

実行結果

image.png


降順のキーの例

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

実行結果

image.png

注意点

  • SETLL の命令のみで使用可能
    レコード末尾に読取開始位置をセットするとき、感覚的に SELGT を使いそうですが、*END を使う場合、SETGT ではコンパイルエラーとなってしまうので、SETLL を使用する必要があります。
  • 演算項目 2 には、ファイル名を指定
    SETLL では、ファイル名かレコード名を指定が可能ですが、演算項目 1 にSTART やEND を指定する際は、ファイル名の指定しなければなりません。

終わりに

今回は、*START・*END を使用したレコードの読取開始位置の設定方法についてご紹介させていただきました。

何点か注意しなければならない点がありますが、*LOVAL・*HIVALとは異なり、データが昇順、降順であることに影響を受けることなく、レコードの先頭または末尾にキーセットすることが可能となります。

最後までお読みいただきありがとうございました。ご参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0