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

ワークステーション VSAM 直接データ・セットのロード

直接データ・セットをロードするときには、OUTPUT 用の 関連ファイルをオープンする必要があります。DIRECT ファイルまたは SEQUENTIAL ファイルを使用します。

DIRECT OUTPUT ファイルの場合、各レコードは WRITE ステートメントの KEYFROM オプション 内の相対レコード番号 (つまりキー) で指定された位置に入れられます (ワークステーション VSAM データ・セットのキーの使用を参照)。

SEQUENTIAL OUTPUT ファイルの場合、KEYFROM オプションの 指定の有無に関係なく WRITE ステートメントを使用します。KEYFROM オプションを指定すると、レコードは指定されたスロット内に置かれ、省略した場合は、レコードは 現在位置に続くスロット内に 置かれます。レコードを昇順の相対レコード番号順に並べる必要はありません。KEYFROM オプションを省略しても、KEYTO オプションを使用することにより、書き込まれたレコードの相対レコード番号を取得することができます。

KEYFROM オプションも KEYTO オプションも使わずに、直接データ・セットを順次にロードする場合は、KEYED 属性を使用する必要はありません。

すでにレコードが存在する位置にレコードをロードしようとするのは誤りです。KEYFROM オプションを使用すると KEY 条件が生じ、それを省略すると ERROR 条件が発生します。

図 22 は、ワークステーション VSAM 直接データ・セットを定義およびロード するプログラムの例です。PL/I プログラムでは、データ・セットは DIRECT OUTPUT ファイルによってロードされ、WRITE...FROM...KEYFROM ステートメントが使用されます。

データが順に並んでいてキーが順序どおりになっていれば、SEQUENTIAL ファイル を使用して、先頭からデータ・セットに書き込むことができるはずです。この後レコードは、次に使用できるスロットに入れられ、該当する番号が付けられます。そして各レコード用のキーの番号が、KEYTO オプションを使って戻されます。

図 22. ワークステーション VSAM 直接データ・セットのロード
 /********************************************************************/
 /*  DESCRIPTION                                                     */
 /*    Load an ISAM direct data set.                                 */
 /*                                                                  */
 /*  USAGE                                                           */
 /*    The following commands are required to establish              */
 /*    the environment variables to run this program:                */
 /*                                                                  */
 /*      SET DD:SYSIN=ISAM4.INP,RECSIZE(80)                          */
 /*      SET DD:NOS=ISAM4.OUT,AMTHD(ISAM),RECCOUNT(100)              */
 /********************************************************************/
  CREATD: proc options(main);

    dcl  Nos file record output direct keyed
         env(organization(relative) recsize(20) );

    dcl  Sysin file input record;
    dcl 1   In_Area,
         2   Name   char(20),
         2   Number char( 2);
    dcl Sysin_Eof bit (1) init('0'b);
    dcl Ntemp fixed(15);

       on endfile (Sysin) Sysin_Eof = '1'b;

       open file(Nos);
       read file(Sysin) into(In_Area);
       do while(¬Sysin_Eof);
          Ntemp = Number;
          write file(Nos) from(Name) keyfrom(Ntemp);
          put file(sysprint) skip edit (In_Area) (a);
          read file(Sysin) into(In_Area);
       end;

       close file(Nos);
   end CREATD;
This could be the input file for this program:
ACTION,G.           12
BAKER,R.            13
BRAMLEY,O.H.        28
CHEESNAME,L.        11
CORY,G.             36
ELLIOTT,D.          85
FIGGINS,E.S.        43
HARVEY,C.D.W.       25
HASTINGS,G.M.       31
KENDALL,J.G.        24
LANCASTER,W.R.      64
MILES,R.            23
NEWMAN,M.W.         40
PITT,W.H.           55
ROLF,D.E.           14
SHEERS,C.D.         21
SURCLIFFE,M.        42
TAYLOR,G.C.         47
WILTON,L.W.         44
WINSTONE,E.M.       37

Terms of use | Feedback

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