Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, プログラミング・ガイド

REGIONAL(1) データ・セットへのアクセスと更新

いったん REGIONAL(1) データ・セットを作成すると、SEQUENTIAL INPUT お よび SEQUENTIAL UPDATE、または DIRECT INPUT および DIRECT UPDATE のために そのデータ・セットにアクセスするファイルをオープンすることができます。 既存データ・セットを上書きする場合にのみ それを OUTPUT のために オープンすることができます。表 21 は、領域データ・セットにアクセスするためのステートメントとオプションを示しています。

順次アクセス

REGIONAL(1) データ・セットを処理する SEQUENTIAL ファイルをオープンするには、INPUT 属性または UPDATE 属性を使用します。 データ伝送ステートメントには KEY オプションを指定してはなり ませんが、KEYTO オプションは使えるため、 ファイルは KEYED 属性を持つことができます。KEYTO オプションで参照されるターゲット文字ストリングが 8 文字を超えると、 返される値 (8 文字の領域番号) の左側にブランクが埋め込まれます。 また、ターゲット・ストリングが 8 文字より短い場合は、返された値の左側が切り捨てられます。

順次アクセスは、領域番号の昇順で行われます。 ダミー・レコードも実際のレコードも、レコードはすべて検索されるため、 ユーザーの PL/I プログラムがダミー・レコードを認識するようにしておく必要があります。

REGIONAL(1) データ・セットで順次入力を使用すれば、 領域番号の昇順ですべてのレコードを読み取ることができます。 また、順次更新では、順番に各レコードを読み取り、もう一度書き込むことが可能です。

REGIONAL(1) データ・セットにアクセスする SEQUENTIAL UPDATE ファイル に対する READ ステートメントと REWRITE ステートメント間の関係を決める規則は、 連続データ・セットの場合と同じです。 連続データ・セットの詳細については、連続データ・セットの定義と使用を参照してください。

直接アクセス

REGIONAL(1) データ・セットを処理する直接ファイルをオープンするには、 INPUT 属性または UPDATE 属性を使用します。 すべてのデータ伝送ステートメントはソース・キーを 持っていなければならず、DIRECT 属性は KEYED 属性を暗黙指定します。

次の規則に従って REGIONAL(1) データ・セット内のレコードを 検索、追加、削除、または置換するには、DIRECT UPDATE ファイルを 使用します。

検索
ダミー・レコードも実際のレコードもすべて検索されます。 したがって、ユーザー・プログラムがダミー・レコードを認識できなくてはなりません。
追加
WRITE ステートメントは、ソース・キーで指定された 領域の既存レコード (実際のレコードまたはダミー・レコード) を新規レコードで置き換えます。
削除
DELETE ステートメントでソース・キーを使って指定したレコードは、 ダミー・レコードに変換されます。
置換
REWRITE ステートメントでソース・キーを使って指定したレコードは、ダミ ー・レコードであれ実際のレコードであれ変換されます。

REGIONAL(1) データ・セットの更新は、図 33 に示されています。 このプログラムはデータ・セット を更新し、データ・セットの内容をリストします。 別のレコードや更新済みレコードを書き込む前に、その領域内の 既存レコードをテストし、それがダミー・レコードであるかどうかを 確認します。これは、たとえダミーでなくても WRITE ステートメント は REGIONAL(1) データ・セット中の既存レコードを上書きできるためです。 同様に、データ・セットの内容を順番に読み取ったり印刷したりする際に、 各レコードがテストされ、ダミー・レコードは印刷されません。

図 33. REGIONAL(1) データ・セットの更新
 //EX10    JOB
 //STEP2   EXEC  IBMZCBG,PARM.PLI='NOP,MAR(1,72)',PARM.BIND='LIST'
 //PLI.SYSIN  DD  *
  ACR1: PROC OPTIONS(MAIN);
    /*  UPDATING A REGIONAL(1) DATA SET  -  PHONE DIRECTORY      */
     DCL NOS FILE RECORD  KEYED ENV(REGIONAL(1));
     DCL  SYSIN FILE INPUT RECORD;
     DCL  (SYSIN_REC,NOS_REC) BIT(1) INIT('1'B);
     DCL 1   CARD,
          2   NAME   CHAR(20),
          2   (NEWNO,OLDNO)  CHAR( 2),
          2   CARD_1 CHAR( 1),
          2   CODE   CHAR( 1),
          2   CARD_2 CHAR(54);
     DCL IOFIELD CHAR(20);
     DCL BYTE    CHAR(1) DEF IOFIELD;

    ON ENDFILE(SYSIN) SYSIN_REC = '0'B;
    OPEN FILE (NOS) DIRECT UPDATE;
    READ FILE(SYSIN) INTO(CARD);

    DO WHILE(SYSIN_REC);
       SELECT(CODE);
          WHEN('A','C') DO;
              IF CODE = 'C' THEN
                 DELETE FILE(NOS) KEY(OLDNO);
              READ FILE(NOS) KEY(NEWNO) INTO(IOFIELD);
              IF UNSPEC(BYTE) = (8)'1'B
                 THEN WRITE FILE(NOS) KEYFROM(NEWNO) FROM(NAME);
              ELSE PUT FILE(SYSPRINT) SKIP LIST ('DUPLICATE:',NAME);
          END;
          WHEN('D') DELETE FILE(NOS) KEY(OLDNO);
       OTHERWISE PUT FILE(SYSPRINT) SKIP LIST ('INVALID CODE:',NAME);
    END;
       READ FILE(SYSIN) INTO(CARD);
    END;

    CLOSE FILE(SYSIN),FILE(NOS);
    PUT FILE(SYSPRINT) PAGE;
    OPEN FILE(NOS) SEQUENTIAL INPUT;
    ON ENDFILE(NOS) NOS_REC = '0'B;
    READ FILE(NOS) INTO(IOFIELD) KEYTO(NEWNO);
    DO WHILE(NOS_REC);
       IF UNSPEC(BYTE) ¬= (8)'1'B
          THEN PUT FILE(SYSPRINT) SKIP EDIT (NEWNO,IOFIELD)(A(2),X(3),A);
       PUT FILE(SYSPRINT) SKIP EDIT (IOFIELD) (A);
       READ FILE(NOS) INTO(IOFIELD) KEYTO(NEWNO);
    END;
   CLOSE FILE(NOS);
   END ACR1;
 /*
 //GO.NOS   DD DSN=J44PLI.NOS,DISP=(OLD,DELETE),UNIT=SYSDA,VOL=SER=nnnnnn
 //GO.SYSIN DD *
 NEWMAN,M.W.         5640 C
 GOODFELLOW,D.T.     89   A
 MILES,R.              23 D
 HARVEY,C.D.W.       29   A
 BARTLETT,S.G.       13   A
 CORY,G.               36 D
 READ,K.M.           01   A
 PITT,W.H.             55
 ROLF,D.F.             14 D
 ELLIOTT,D.          4285 C
 HASTINGS,G.M.         31 D
 BRAMLEY,O.H.        4928 C
 /*

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)