ILE COBOL 解説書

索引付きファイルおよび相対ファイル

WRITE - 形式 2 - 索引付きおよび相対ファイル
 
>>-WRITE--レコード名-1--+------------+-------------------------->
                        '-FROM--ID-1-'
 
>--+-----------------------------------+------------------------>
   |        (1)                        |
   '-FORMAT------+----+-+-ID-2-------+-'
                 '-IS-' '-リテラル-1-'
 
>--+---------------------------------+-------------------------->
   |              (1)                |
   '-NULL-KEY-MAP-------+----+--ID-8-'
                        '-IS-'
 
>--+-----------------------------+------------------------------>
   |          (1)                |
   '-NULL-MAP-------+----+--ID-9-'
                    '-IS-'
 
>--+----------------------------------------+------------------->
   '-INVALID--+-----+--命令ステートメント-1-'
              '-KEY-'
 
>--+--------------------------------------------+--------------->
   '-NOT INVALID--+-----+--命令ステートメント-2-'
                  '-KEY-'
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'
 
 

注:

  1. IBM 拡張

関連情報

レコード名-1
データ部の FD 記入項目で定義されていなければなりません。 レコード名-1 は修飾できます。 レコード名-1 をソート・ファイルまたはマージ・ファイルと関連付けてはなりません。

相対ファイルの場合のみ、レコード名-1 内の文字桁数は、 置き換えられるレコード内の文字桁数と等しくなければなりません。 レコード名-1 をソート・ファイルまたはマージ・ファイルと関連付けてはなりません。

FROM
FROM を指定すると、実行結果は次の場合と同じになります。
MOVE identifier-1 TO record-name-1
WRITE record-name-1

WRITE ステートメントの実行後、情報は ID-1 ではまだ使用可能ですが、レコード名-1 では使用不可になります。 (INTO/FROM ID 句を参照してください。)

ID-1
英数字または数字編集データ項目でなければなりません。 データはこのフィールドから受け入れフィールドへ転送されます。

レコード名-1 と ID-1 の両方で同じ記憶域を参照することはできません。

ID-1 は、英数字または DBCS 関数 ID の名前にすることができます。

索引付きファイルの書き込みに関する考慮事項

WRITE ステートメントを実行する前に、 基本レコード・キー (ファイル制御記入項目で定義されている RECORD KEY データ項目) を希望の値に設定しなければなりません。 WRITE ステートメントが処理されると、システムはレコードを解放します。

+----------------------------------IBM 拡張----------------------------------+

DUPLICATES 句を指定する場合には、 ある形式用のレコード・キーの値が固有である必要はありません (RECORD KEY 文節を参照してください)。 この場合、システムは、レコードに対する後続の順次アクセスにおいて、DDS で指定された順序で検索を行えるようにレコードを保管します。

+------------------------------End of IBM 拡張-------------------------------+

SEQUENTIAL アクセスをもち、OUTPUT 用にオープンされており、 ブロック化が有効である (BLOCK CONTAINS 文節が指定されている) 固定サイズの索引付きファイルにレコードが書き込まれる場合、 ブロック化因数は、レコードのブロックによってファイルの終わりに到達するポイントで 1 に変わります。

ALTERNATE RECORD KEY 文節も、ファイル制御記入項目で指定されている 場合、DUPLICATES 句が指定されない限り、それぞれの代替キーは固有でなければな りません。 DUPLICATES 句を指定する場合には、代替レコード・キーの値が固有であ る必要はありません。

この時点でのファイル内の残りのレコード数は、ブロック内のレコード数よりも少なくなります。

ファイル制御記入項目中に ACCESS IS SEQUENTIAL が指定されている場合には、レコードを RECORD KEY 値の昇順に解放しなければなりません。

ファイル制御記入項目中に ACCESS IS RANDOM または ACCESS IS DYNAMIC が指定されている場合には、 プログラマーが指定する順序に従ってレコードを解放できます。 索引付きファイルがランダム・アクセス・モードでアクセスされるときに、 入出力ステートメントで FORMAT 句が指定されていない場合には、定義された最初の形式が使用されます。 複数形式論理ファイルへの書き込み時には、WRITE ステートメントで形式を指定しなければなりません。

相対ファイルの書き込みに関する考慮事項

OUTPUT ファイルに対しては、WRITE ステートメントにより次のような処置が取られます。

I-O モードでオープンされるファイルについては、ACCESS IS RANDOM または ACCESS IS DYNAMIC が指定されていなければなりません。 WRITE ステートメントは、ファイルに新しいレコードを挿入します。 WRITE ステートメントを出す前に、このレコードについての希望の相対レコード番号を RELATIVE KEY に入れておかなければなりません。 このレコードは、WRITE ステートメントの実行時に、ファイル内の指定された相対レコード番号の位置に入れられます。

レコードの DELETE 操作を許可しない (たとえば、ALWDLT(*NO) パラメータ ーを指定した CRTPF を使用して) 物理ファイルについては、レコードの更新操作を許可 (つまり、ALWUPD(*YES) パラメーターを指定した CRTPF) しなければなりません。

+----------------------------------IBM 拡張----------------------------------+

FORMAT 句

ファイルに複数のレコード形式がある場合に必要です。

FORMAT 句で指定する値には、この入出力操作で使用するレコード形式の名前が入ります。 システムはこれを使用して、どのレコード形式に対して操作を行うかを指定または選択します。

ID-2 を指定する場合には、10 文字以下の英数字データ項目にしなければなりません。

リテラル-1 を指定する場合は、10 文字以下の大文字の文字ストリングにしなければなりません。

索引付きファイルがランダム・アクセス・モードでアクセスされるときに、 入出力ステートメントで FORMAT 句が指定されていない場合には、定義された最初の形式が使用されます。

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

NULL-KEY-MAP IS 句

NULL-KEY-MAP IS 句のこの句についての説明を参照してください。

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

NULL-MAP IS 句

NULL-MAP IS 句のこの句についての説明を参照してください。

+------------------------------End of IBM 拡張-------------------------------+

INVALID KEY 句

このファイルに対して明示または暗黙の EXCEPTION/ERROR プロシージャー が指定されていない場合には、INVALID KEY 句を指定しなければなりません。

外部で定義されたファイルの境界を超えて書き込みを試みると、WRITE ステートメントの実行が失敗し、EXCEPTION/ERROR 条件が起こります。

ランダムまたは動的アクセス・モードの相対ファイルの場合、INVALID KEY 条件が起こるのは、RELATIVE KEY に、 すでにデータの入っているレコードが指定されたときです。

ランダムまたは動的アクセス・モードの索引付きファイルの場合、INVALID KEY 条件が起こるのは、 レコード域内のキー・フィールドの値が、すでに存在するレコードのものと等しく、DUPLICATES が認められていないときです。

順次アクセス・モードの索引付きファイルの場合、INVALID KEY 条件が起こるのは、 連続するレコードの基本レコード・キーの値が昇順になっていないときです。

+----------------------------------IBM 拡張----------------------------------+

重複キーが認められているファイルの場合、INVALID KEY 条件が起こるのは、 レコード・キーの値が前のレコードのものよりも小さいときだけです。

+------------------------------End of IBM 拡張-------------------------------+

無効キー条件が検出されると、WRITE ステートメントの実行が失敗し、レコードの内容は影響されません。 プログラム実行は INVALID KEY 条件に説明されている規則に従って続行されます。

NOT INVALID KEY 句

NOT INVALID KEY 句が指定されていて、WRITE ステートメントの実行終了時に無効キー条件が存在しない場合には、 制御はこの句に関連する命令ステートメントに渡されます。

END-WRITE 句

この明示範囲終了符号は、WRITE ステートメントの有効範囲を区切る働きをします。 END-WRITE 句を使用することによって、WRITE 条件ステートメントを別の条件ステートメントにネストすることができます。 また、END-WRITE 句は、WRITE 命令ステートメントで使用することもできます。

詳細は 範囲区切りステートメントを参照してください。

+----------------------------------IBM 拡張----------------------------------+

FORMATFILE

WRITE ステートメント - 形式 3 - FORMATFILE
 
>>-WRITE--レコード名-1--+------------+-------------------------->
                        '-FROM--ID-1-'
 
>--+------------------------------+----------------------------->
   '-FORMAT-+----+-+-ID-2-------+-'
            '-IS-' '-リテラル-1-'
 
>--+-----------------------------+------------------------------>
   '-+-INDICATOR--+-+-----+-ID-3-'
     +-INDICATORS-+ +-IS--+
     '-INDIC------' '-ARE-'
 
>--+---------------------------------------------+-------------->
   '-+----+-+-END-OF-PAGE-+-命令ステートメント-1-'
     '-AT-' '-EOP---------'
 
>--+-------------------------------------------------+---------->
   '-NOT-+----+-+-END-OF-PAGE-+-命令ステートメント-2-'
         '-AT-' '-EOP---------'
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'
 
 

FORMAT 句

ファイルに複数のレコード形式がある場合に必要です。

FORMAT 句で指定する値には、この入出力操作で使用するレコード形式の名前が入ります。 システムはこれを使用して、どのレコード形式に対して操作を行うかを指定または選択します。

ID-2 を指定する場合には、10 文字以下の英数字データ項目にしなければなりません。

リテラル-1 を指定する場合は、10 文字以下の大文字の文字ストリングにしなければなりません。

全桁がブランクの値は、FORMAT 句が指定されなかった場合と同じ扱いになります。 その値がファイルに対して有効でない場合は、9K の FILE STATUS が戻され、(そのファイルに適用可能であれば) USE プロシージャーが呼び出されます。

INDICATORS 句

データ・レコードが書き込まれるときに使用される標識を指定します。 標識は、データ・レコードについての情報と、それがプログラムに入力された方法を渡すために使用できます。

INDICATORS 句の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。

ID-3 は、OCCURS 文節なしで指定された基本ブール・データ項目か、 または基本ブール・データ項目が従属しているグループ項目でなければなりません。

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

TRANSACTION (非サブファイル)

WRITE - 形式 4 - TRANSACTION (非サブファイル)
 
>>-WRITE--レコード名-1--+------------+-------------------------->
                        '-FROM--ID-1-'
 
>--FORMAT-+----+-+-ID-2-------+--------------------------------->
          '-IS-' '-リテラル-1-'
 
>--+----------------------------------+------------------------->
   '-TERMINAL--+----+--+-ID-3-------+-'
               '-IS-'  '-リテラル-2-'
 
>--+--------------------------------------------+--------------->
   '-STARTING--+----+--+------+--+-ID-4-------+-'
               '-AT-'  '-LINE-'  '-リテラル-3-'
 
>--+----------------+--+-----------------------------+---------->
   '-| ROLLING 句 |-'  '-+-INDICATOR--+-+-----+-ID-8-'
                         +-INDICATORS-+ +-IS--+
                         '-INDIC------' '-ARE-'
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'
 
ROLLING 句:
 
|--+-BEFORE-+--ROLLING--+-------+--+-ID-5-------+--------------->
   '-AFTER--'           +-LINES-+  '-リテラル-4-'
                        '-LINE--'
 
>--+---------+--+-ID-6-------+--+-UP---+--+-ID-7-------+-------->
   +-THROUGH-+  '-リテラル-5-'  '-DOWN-'  '-リテラル-6-'
   '-THRU----'
 
>--+-------+----------------------------------------------------|
   +-LINES-+
   '-LINE--'
 
 

FORMAT 句

リテラル-1 または ID-2 では、書き込まれるレコード形式の名前を指定します。 リテラル-1 を指定する場合は、非数字で、10 文字以下の大文字にしなければなりません。 ID-2 (指定されている場合) は、英数字データ項目で、10 文字以下の長さでなければなりません。 ID-2 がブランクである場合、WRITE ステートメントは、FORMAT 句が省略された場合と同じように実行されます。

TERMINAL 句

TERMINAL 句は、出力レコードの送信先プログラム装置を指定します。

リテラル-2 または ID-3 の内容は、 ファイルによって以前に明示的または暗黙に獲得されたプログラム装置の名前でなければなりません。 リテラル-2 を指定する場合は、10 文字以下の非数字にしなければなりません。 ID-3 を指定する場合は、10 文字以下の英数字データ項目を参照しなければなりません。ブランクの値は、TERMINAL 句が省略された場合と同様に扱われます。

TRANSACTION ファイルによって獲得されたプログラム装置が 1 台だけである場合は、TERMINAL 句を省略できます。 そのプログラム装置は、常時、WRITE 操作用に使用できます。

複数のプログラム装置を獲得している TRANSACTION ファイルに対する WRITE 操作で TERMINAL 句が省略されると、 デフォルトのプログラム装置が使用されます。

STARTING 句

STARTING 句は、可変開始行キーワードを使用するレコード形式の 開始行番号を指定します。 この句は、ディスプレイ装置についてのみ有効です。

フィールドが始まる実際の行番号は、次の式によって求めることができます。
実際の行 = 開始行 + DDS 開始行 - 1

ここで、

以下の場合は、書き込み操作が正常に行われます。

以下の場合は、書き込み操作が失敗し、プログラムが終了します。

STARTING 句に指定された値が画面区域内にある場合、画面区域の外側のフィールドは無視されます。

STARTING 句のリテラル-3 は数字リテラルでなければなりません。 ID-4 は基本数字項目でなければなりません。

STARTING 句を使用するには、書き込まれる形式について、DDS レコード・レベル・キーワード SLNO(*VAR) を指定しなければなりません。 レコード形式でこのキーワードが指定されていない場合、STARTING 句は実行時に無視されます。

DDS キーワード CLRL も STARTING 句に影響を与えます。 CLRL は、WRITE ステートメントの実行時に画面がどの程度消去されるかを制御します。

SLNO(*VAR) および CLRL の詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある、iSeries Information Center の「データベースおよびファイル・システム」カテゴリーの中の『DB2 Universal Database for iSeries』セクション を参照してください。

ROLLING 句

ROLLING 句によって、ワークステーション画面に表示される行を移動できます。 画面のすべてまたは一部の行を次ページ (ロールアップ) または前ページ (ロールダウン) することができます。 行送りによって空けられる行は消去され、そこへ別の画面形式を書き出すことができます。 この句は、ディスプレイ装置についてのみ有効です。

ROLLING は、ワークステーション画面に新しい形式を書き出そうとする WRITE ステートメントの中で指定します。 書き出しを行送りの前と後のどちらに行うか、行送りしたい行の範囲、それらの行を何行送るか、 および行送り操作を上方と下方のどちらに行うかを指定しなければなりません。

行送りの後、それらの行上のフィールドでは、 その DDS 表示属性 (たとえば、下線表示) は維持されますが、 その DDS 使用属性 (たとえば、入力可能性) は失われます。 書き出されてから行送りされた (BEFORE ROLLING 句) 行上のフィールドも、その使用属性を失います。

形式の一部が行送りされる場合、形式全体がその使用属性を失います。 複数の形式が存在する場合、行送りされた形式だけがその使用属性を失います。

ROLLING 句を指定する場合は、次の一般的な規則が適用されます。

詳細については、Web サイト http://www.ibm.com/eserver/iseries/infocenter にある、iSeries Information Center の「データベースおよびファイル・システム」カテゴリーの中の『DB2 Universal Database for iSeries』セクション を参照してください。

INDICATORS 句

データ・レコードが書き込まれるときに使用される標識を指定します。 標識は、データ・レコードについての情報と、それがプログラムに入力された方法を渡すために使用できます。

INDICATORS 句の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」の『トランザクション・ファイルに関する標識の使用』を参照してください。

ID-8 は、OCCURS 文節なしで指定された基本ブール・データ項目か、または基本ブール・データ項目が従属しているグループ項目でなければなりません。

図 27 に、行送り (ローリング) の例を示します。 初期画面形式 FMT1 がワークステーション画面に書き出されています。 プログラムは、この画面形式を処理し、現在、次の画面形式 FMT2 をワークステーション画面に書き出す準備ができています。 FMT2 がワークステーション画面に書き出される前に、FMT1 の一部が 2 行下方送りされます。

次の WRITE ステートメントの実行によって、FMT1 の一部が 2 行下方送りされ、FMT2 がワークステーション画面に書き出されます。

   WRITE SCREENREC FORMAT "FMT2"
    AFTER ROLLING LINES 14 THROUGH 20
    DOWN 2 LINES

この WRITE ステートメントが実行されるとき、次のステップが行われます。

  1. 行 14 〜 20 の内容が 2 行下方送りされます。
    1. 行 14 〜 18 の内容が行 16 〜 20 に表示されるようになります。
    2. 行 14 および 15 の内容は空きになり、消去されます。
    3. 行 19 および 20 の内容はウィンドウの外側に送られて消えます。
  2. 行送り操作が行われた後、FMT2 がワークステーション画面に書き出されます。
    1. FMT2 の一部は、行送り操作で空きとなった区域に書き出されます。
    2. FMT2 の一部は、FMT1 から残っているデータの上に書き出されます。
  3. READ ステートメントによってワークステーション画面の内容がプログラムに戻されるときには、FMT2 の入力可能フィールドだけが戻されます。

図 27. ROLLING 操作の例

REQTEXT

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

TRANSACTION (サブファイル)

WRITE ステートメント - 形式 5 - TRANSACTION (サブファイル)
 
>>-WRITE SUBFILE--レコード名-1--+------------+------------------>
                                '-FROM--ID-1-'
 
>--FORMAT-+----+-+-ID-2-------+--------------------------------->
          '-IS-' '-リテラル-1-'
 
>--+----------------------------------+------------------------->
   '-TERMINAL--+----+--+-ID-3-------+-'
               '-IS-'  '-リテラル-2-'
 
>--+-----------------------------+------------------------------>
   '-+-INDICATOR--+-+-----+-ID-4-'
     +-INDICATORS-+ +-IS--+
     '-INDIC------' '-ARE-'
 
>--+----------------------------------------+------------------->
   '-INVALID--+-----+--命令ステートメント-1-'
              '-KEY-'
 
>--+--------------------------------------------+--------------->
   '-NOT INVALID--+-----+--命令ステートメント-2-'
                  '-KEY-'
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'
 
 

形式 5 は、ディスプレイ装置についてのみ使用できます。 その他のタイプの装置についてサブファイル形式の WRITE ステートメントを使用すると、WRITE 操作が失敗し、 ファイル状況 90 が設定されます。

形式がサブファイル・レコードであり、SUBFILE が指定される場合には、 書き込まれるファイルの SELECT 文節に RELATIVE KEY 文節が指定されていなければなりません。 このサブファイルに書き込まれるレコードは、 形式名によって識別されたサブファイル内のレコードで、RELATIVE KEY データ項目の値と等しい相対レコード番号を持つものです。

INDICATORS 句

データ・レコードが書き込まれるときに使用される標識を指定します。 標識は、データ・レコードについての情報と、それがプログラムに入力された方法を渡すために使用できます。

INDICATORS 句の詳細は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」の『トランザクション・ファイルに関する標識の使用』を参照してください。

ID-4 は、OCCURS 文節なしで指定された基本ブール・データ項目か、または基本データ・ブールの項目が従属しているグループ項目でなければなりません。

TERMINAL 句

TERMINAL 句に関する一般的な考慮事項については、形式 4 を参照してください。

TERMINAL 句は、どのプログラム装置のサブファイルにレコードが書き込まれるかを指定します。 TERMINAL 句を指定する場合、リテラル-2 または ID-3 は、TRANSACTION ファイルに関連付けられているワークステーションを参照しなければなりません。 リテラル-2 または ID-3 にブランクの値が入っている場合、TERMINAL 句は、それが指定されなかった場合と同じように扱われます。 TERMINAL 句で指定するワークステーションは、明示的または暗黙に獲得されているものでなければなりません。

TERMINAL 句が省略されている場合、使用されるサブファイルは、 デフォルトのプログラム装置に関連付けられているサブファイルです。

INVALID KEY 句

INVALID KEY 条件が発生するのは、サブファイルの中にそのレコード番号のレコードがすでに存在している場合、 または指定された相対レコード番号が、許容される最大のサブファイル・レコード番号より大きい場合です。 該当する USE プロシージャーが指定されていないすべてのファイルについて、WRITE SUBFILE ステートメントの中で INVALID KEY 句を指定しなければなりません。

NOT INVALID KEY 句

この句では、使用されるステートメントについて無効キー条件が存在しない場合に実行されるプロシージャーを指定できます。

END-WRITE 句

この明示範囲終了符号は、WRITE ステートメントの有効範囲を区切る働きをします。 END-WRITE 句を使用することによって、WRITE 条件ステートメントを別の条件ステートメントにネストすることができます。 また、END-WRITE 句は、WRITE 命令ステートメントで使用することもできます。

詳細は 範囲区切りステートメントを参照してください。

+------------------------------End of IBM 拡張-------------------------------+


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]