バージョン 4.2.5
 —  ステートメント  —

DEFINE WORK FILE

DEFINE WORK FILE n [operand1] [TYPE operand2]

注意:
角カッコ [...] で示されている要素はオプションですが、このステートメントではこれらのオプションの少なくとも 1 つを指定する必要があります。

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:CLOSE WORK FILE | READ WORK FILE | WRITE WORK FILE

関連機能グループ:「ワークファイル/PC ファイルの制御


機能

DEFINE WORK FILE ステートメントは、Natural アプリケーション内で Natural ワークファイル番号にファイル名を割り当てるために使用します。

このステートメントを使用することで、Natural セッション内でワークファイルの割り当てをダイナミックに行ったり、変更することができます。また、別のレベルで作成したワークファイルの割り当てを上書きすることもできます。

このステートメントを実行したときに、指定したワークファイルがすでに開かれていると、ワークファイルはこのステートメントによって暗黙的に閉じられます。

セッションの間に使用するすべてのワークファイルは、プロファイルパラメータ WORK のサブパラメータ AM によってアクセスメソッドに事前に割り当てるか、または JCL での定義によって自動的に割り当てられます。

注意:
Unicode およびコードページのサポートについては、『Unicode およびコードページのサポート』ドキュメントの「メインフレームプラットフォーム上のワークファイルと出力ファイル」を参照してください。

Top of page

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                         不可
operand2 C S       A                         不可

構文要素の説明:

DEFINE WORK FILE n n は、ワークファイル番号です(1~32)。 これは、WRITE WORK FILEREAD WORK FILE、または CLOSE WORK FILE ステートメントのいずれかで使用される番号です。
operand1 operand1 は、ワークファイルの名前です。

operand1 では、ワークファイル番号に割り当てられるデータセットの名前を指定できます。

operand1 の長さは 1 ~ 253 文字です。 名前には、論理または物理データセット名のいずれかを指定できます。 可能なフォーマットは、オペレーティングシステム環境、およびプロファイルパラメータ WORK のサブパラメータ AM で定義するアクセスメソッドによって異なります。 一部のアクセスメソッドでは、operand1 のようなワークファイル名はサポートされていません(例:AM=COMPAM=PC)。

operand1 を指定しない場合は、このワークファイル番号に対して以前に実行した DEFINE WORK FILE ステートメントで指定された現在の名前によって、operand1 の値が決定されます。 まだ DEFINE WORK FILE ステートメントを実行していない場合、名前は Natural パラメータモジュール NATPARM から取得されます。

注意:
operand1 が指定されていない場合、Natural for Mainframes と Natural for Windows/UNIX/OpenVMS の動作は異なります。

各オペレーティングシステムまたは各 TP モニタにおけるワークファイルの命名規則については、次のセクションを参照してください。

operand2

operand2 はワークファイルのタイプを指定します。

operand2 の値では、大文字と小文字が区別されません。値は引用符で囲むか、英数字の変数で指定する必要があります。

UNFORMATTED

フォーマットがまったく行われていないファイル。 フォーマット情報が書き込まれていません(フィールドまたはレコードのいずれにも)。

UNFORMATTED は、ワークファイルをレコード境界のないバイトストリームとして扱います。 タイプ UNFORMATTED は、Entire Connection によって拒否されます。

フォーマット:UNFORMATTED

FORMATTED

FORMATTED では、正規のレコード指向のワークファイルを定義します。このワークファイルは、旧バージョンの Natural と同じ方法で処理されます。

例:

DEFINE WORK FILE 17 #FILE TYPE 'UNFORMATTED'
#TYPE := 'FORMATTED' 
DEFINE WORK FILE 18 #FILE TYPE #TYPE

Top of page

z/OS バッチ、TSO、およびサーバーでのワークファイル名

次のトピックについて説明します。

ワークファイル名 - operand1

z/OS 環境で、アクセスメソッド AM=STD を指定してワークファイル番号を定義する場合、operand1 は次のようになります。

論理データセット名

例:

DEFINE WORK FILE 21 'SYSOUT1'

指定したデータセット SYSOUT1 は、DEFINE WORK FILE ステートメントを実行する前に割り当てておく必要があります。

割り当ては、JCL、CLIST(TCO)、またはダイナミックアロケーション(SVC 99)によって実行できます。 ダイナミックアロケーションには、ライブラリ SYSEXT にあるアプリケーションプログラミングインターフェイス USR2021N を使用できます。

DEFINE WORK FILE ステートメントで定義されているデータセット名は、プロファイルパラメータ WORK のサブパラメータ DEST で指定された名前より優先されます。

または、データセット名に接頭辞 DDN= を付けて、それが DD 名であることを示すこともできます。 次に例を示します。

DEFINE WORK FILE 22 'DDN=MYWORK'
物理データセット名

例:

DEFINE WORK FILE 23 'TEST.WORK.FILE'

指定したデータセットが、カタログフォーム内に存在している必要があります。 DEFINE WORK FILE ステートメントを実行すると、現在の DD 名とオプション DISP=SHR を含む SVC 99 によって、データセットはダイナミックに割り当てられます。

データセット名が 8 文字以下でピリオド(.)を含んでいない場合は、誤って DD 名と解釈されている可能性があります。 これを回避するには、名前の先頭に DSN= を付けます。 次に例を示します。

DEFINE WORK FILE 22 'DSN=WORKXYZ'

データセットが PDS メンバの場合は、データセット名(1~44 文字)の後に PDS メンバ名(1~8 文字)をカッコで囲んで指定します。 次に例を示します。

DEFINE WORK FILE 4 'TEST.WORK.PDS(TEST1)'

指定したメンバが存在しない場合は、指定した名前の新しいメンバが作成されます。

HFS ファイル

例:

DEFINE WORK FILE 14 '/u/nat/rec/test.txt'

指定したパス名が存在する必要があります。 DEFINE WORK FILE ステートメントを実行すると、HFS ファイルがダイナミックに割り当てられます。 指定したメンバが存在しない場合は、指定した名前の新しいメンバが作成されます。

データセットのダイナミックアロケーションでは、次の z/OS パスオプションを使用します。

PATHOPTS=(OCREAT,OTRUNC,ORDWR)
PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIWGRP)
FILEDATA=TEXT

HFS ファイルを閉じると、z/OS によってそのファイルの割り当てが自動的に解除されます(プロファイルパラメータ WORK のサブパラメータ FREE の設定に関係なく)。

HFS ファイルを読み取るには、OTRUNC オプションの関係で、DEFINE WORK FILE ステートメントの代わりにアプリケーションプログラミングインターフェイス USR2021(ダイナミックデータセットアロケーション)を使用する必要があります。 このオプションでは、HFS ファイルは最初の読み取りアクセス時にリセットされて、空のファイルになります。

JES スプールファイルクラス

JES スプールデータセットを作成するには、SYSOUT=xx は目的のスプールファイルクラス)を指定します。 デフォルトスプールファイルクラスの場合は、SYSOUT=* を指定します。

例:

DEFINE WORK FILE 10 'SYSOUT=A'
DEFINE WORK FILE 12 'SYSOUT=*'

ダイナミックアロケーションの追加パラメータを指定するには、DEFINE WORK FILE ステートメントの代わりに、ライブラリ SYSEXT にあるアプリケーションプログラミングインターフェイス USR2021N(ダイナミックデータセットアロケーション)を使用します。

NULLFILE ダミーのデータセットを示します。

データセットの割り当てと割り当て解除

DEFINE WORK FILE ステートメントを実行するときに、物理データセット名、HFS ファイル、スプールファイルクラス、またはダミーデータセットがすでに指定してある場合、対応するデータセットが自動的に割り当てられます。 論理ファイルがすでに開いていると、その論理ファイルは自動的に閉じられます。ただし、プロファイルパラメータ WORK のサブパラメータ CLOSE=FIN を指定してある場合は、エラーが発行されます。 また、新しいデータセットを割り当てる前に、同じ現在の DD 名で割り当てられている既存のデータセットは、自動的に割り当てが解除されます。 プログラムの開始時にまだ割り当てられていないワークファイルのオープンに失敗して不要なオーバーヘッドが発生するのを防止するために、プロファイルパラメータ WORK のサブパラメータ OPEN=ACC(最初のアクセス時に開く)を指定してワークファイルを定義する必要があります。

HFS ファイルの場合、またはプロファイルパラメータ WORK のサブパラメータ FREE=ON を指定してワークファイルを定義した場合は、これらのファイルを閉じると、直ちにワークファイルの割り当てが自動的に解除されます。

データセットのダイナミックな割り当てと割り当て解除の代わりとして、ライブラリ SYSEXT でアプリケーションプログラミングインターフェイス USR2021N(ダイナミックデータセットアロケーション)が提供されています。 また、この API を使用すると、ダイナミックアロケーションの追加パラメータを指定することもできます。

サーバー環境でのワークファイル

サーバー環境では、複数の Natural セッションによって同じ DD 名でデータセットの割り当てまたはオープンが試みられると、エラーが発生することがあります。 これを回避するには、プロファイルパラメータ WORK のサブパラメータ DEST=* でワークファイルを指定するか、または実際の DEFINE WORK FILE ステートメントの前にプログラム内で DEFINE WORK FILE '*' を指定して、そのワークファイルに対して最初の DEFINE WORK FILE ステートメントを実行するときに、Natural が物理データセットの割り当てで一意な DD 名を生成するようにします。

DD 名が CM で始まるすべてのワークファイルは、サーバー環境内のすべてのセッションによって共有されます。 最初のセッションによって出力用に開かれた共有ワークファイルは、サーバーを終了すると物理的に閉じられます。 入力用に開かれた共有ワークファイルが物理的に閉じられるのは、最後のセッションがそのワークファイルを閉じるとき、つまり最後のセッションがエンドオブファイル条件を受信するときです。 ワークファイルの読み取りが複数同時に行われた場合は、1 つのファイルレコードが 1 つの READ WORK FILE ステートメントだけに提供されます。

Top of page

z/VSE バッチでのワークファイル名

z/VSE 環境で、アクセスメソッド AM=STD を指定してワークファイル番号を定義する場合、operand1 は次のようになります。

論理データセット名

例:

DEFINE WORK FILE 21 'SYSOUT1'

指定するデータセット SYSOUT1 は、JCL や、z/VSE の標準またはパーティションラベルで定義されている必要があります。

DEFINE WORK FILE ステートメントで定義されているデータセット名は、プロファイルパラメータ WORK のサブパラメータ DEST で指定された名前より優先されます。

または、データセット名に接頭辞 DDN= を付けて、それが DD 名であることを示すこともできます。 次に例を示します。

DEFINE WORK FILE 22 'DDN=MYWORK'
NULLFILE

ダミーのデータセットを割り当てるには、operand1 として NULLFILE を指定します。

DEFINE WORK FILE n 'NULLFILE'

Top of page

VM/CMS でのワークファイル名

VM/CMS 環境で、AM=STD を指定してワークファイルを定義する場合、operand1 には z/OS 環境と同じことが適用されますが(上記を参照)、次の点で異なります。

AM=CMS を指定してワークファイルを定義する場合は、DEFINE WORK FILE を使用して送り先を変更できます。 パラメータマクロ NTWORK のサブパラメータ DEST で指定できる送り先以外に、REXX のステムも定義できます。 詳細については、『オペレーション』ドキュメントの「出力ファイルおよびワークファイルのサポート」を参照してください。

Top of page

BS2000/OSD バッチおよび TIAM でのワークファイル名

BS2000/OSD 環境で、アクセスメソッド AM=STD を指定してワークファイル番号を定義する場合は、operand1 を使用して、このワークファイルに割り当てるファイル名またはリンク名を指定できます。

この場合、operand1 は長さが 1~253 文字になり、次のいずれかを表します。

次の規則が適用されます。

  1. ファイル名とリンク名は、位置指定パラメータとしてもキーワードパラメータとしても指定できます。 対応するキーワードは、FILE= および LINK= です。 位置指定パラメータとキーワードパラメータの混在は可能ですが、お勧めしません。

  2. コンマなしの 1~8 文字長の文字列はリンク名と解釈されます。 この表記は Natural の旧バージョンと互換性があります。 例:

    DEFINE WORK FILE 1 'W01'

    キーワードパラメータを使用した対応する定義は次のとおりです。

    DEFINE WORK FILE 1 'LINK=W01'
  3. コンマなしの 9~54 文字長の文字列はファイル名と解釈されます。

    例:

    DEFINE WORK FILE 2 'NATURALvr.TEST.WORKFILE02'

    vr は、Natural バージョンとリリース番号です。

    キーワードパラメータを使用した対応する定義は次のとおりです。

    DEFINE WORK FILE 2 'FILE=NATURALvr.TEST.WORKFILE02'
  4. 次の入力は、長さを考慮せずに解釈されるので、ルール 2 と 3 の例外です。

    例:DEFINE WORK FILE 7 'FILE=Y' は文字列に含まれる文字数が 9 文字未満ですが、有効なファイル割り当てであり、リンク名ではありません。

  5. 一般的なファイル名の形式は次のとおりです。

    Wnn.userid.tsn.date.time.number

    上記の意味は次に示すとおりです。

    nn ワークファイル番号
    userid Natural ユーザー ID、8 文字
    tsn 現在のタスクの BS2000/OSD TSN、4 桁
    date DDMMYYYY
    time HHIISS
    number 番号、5 桁
  6. 一般的なリンク名の形式は次のとおりです。

    NWFnnnnn

    nnnnn は 5 桁の数字で、ダイナミックリンク名が生成されるたびに 1 ずつ増加します。

  7. ワークファイル番号へのファイル割り当てを変更すると、割り当てられていたワークファイルは CLOSE により暗黙的に閉じられます。

リンク名のみを指定する場合(例:W01)を除き、すべての場合においてキーワードパラメータを使用することをお勧めします。 これは、追加レポートとの解釈の競合を防止し、9 文字未満のファイル名を使用する場合に必須です。

例:

DEFINE WORK FILE 3 'LINK=#W03'
DEFINE WORK FILE 3 'FILE=#W03'
リンク名

例:

DEFINE WORK FILE 1 'LINKW01'

次の構文と同じ意味です。

DEFINE WORK FILE 1 'LINK=LINKW01'

LINK LINKW01 を含むファイルが、実行時に存在している必要があります。 これは、Natural を開始する前に JCL を使用するか、または現在のアプリケーションからダイナミックに割り当てることにより、作成することができます。 ダイナミックアロケーションには、ライブラリ SYSEXT にあるアプリケーションプログラミングインターフェイス USR2029N(ダイナミックファイルアロケーション)を使用できます。 実行前に、リンクが別のファイル上で有効になっていた場合(例:W01)、プロファイルパラメータ FREE の値(指定可能な値は ON および OFF)に応じて、リンクは開放または保持されます。 解放は、BS2000/OSD コマンドプロセッサに対する明示的な RELEASE コールによって実行されます。

ファイル名

例:

DEFINE WORK FILE 2 'NATURALvr.TEST.WORK02'

次の構文と同じ意味です。

DEFINE WORK FILE 2 'FILE=NATURALvr.TEST.WORK02'

vr は、Natural バージョンとリリース番号です。

operand1 で指定したファイルは、FILE マクロコールを使用して設定され、また DEFINE WORK FILE ステートメントの実行前に対応するワークファイルに対して有効だったリンク名を継承します。

一般的なファイル名

例:

DEFINE WORK FILE 21 '*'

次の構文と同じ意味です。

DEFINE WORK FILE 21 'FILE=*'

ルール 4 に従って作成した名前を持つファイルは、FILE マクロコールを使用して設定され、また DEFINE WORK FILE ステートメントの実行前に対応するワークファイルに対して有効だったリンク名を継承します。

DEFINE WORK FILE 22 'FILE=*,LINK=WFLK22'

ルール 4 に従って作成した名前を持つファイルには、指定したリンク名が FILE マクロコールを使用して設定されます。

ファイル名とリンク名

例:

DEFINE WORK FILE 11 'NATURALvr.TEST.WORKF11,LNKW11'

次の構文と同じ意味です。

DEFINE WORK FILE 11 'FILE=NATURALvr.TEST.WORKF11,LINK=LNKW11'

次の構文も同じ意味です。

DEFINE WORK FILE 11 'FILE=NATURALvr.TEST.WORKF11,LNKW11'

vr は、Natural バージョンとリリース番号です。

operand1 で指定したファイルには、指定したリンク名が FILE マクロコールを使用して設定されます。そして、このファイルは対応するワークファイル番号に割り当てられます。

一般的なファイル名とリンク名

例:

DEFINE WORK FILE 27 '*,*'

次の構文と同じ意味です。

DEFINE WORK FILE 27 'FILE=*,LINK=*'

ルール 4 およびルール 5 に従って作成したファイル名を持つファイルは、FILE マクロコールを使用して設定され、指定したワークファイル 27 に割り当てられます。

注意:
ファイル名とリンク名を指定した場合、プロファイルパラメータ WORK のサブパラメータ FREE の値に関係なく、以前のリンク名は解放されません。

*DUMMY ダミーのデータセットを示します。

Top of page

CICS でのワークファイル名

アクセスメソッド AM=CICS を指定してワークファイル番号を定義する場合は、ワークファイルのプロファイルパラメータ WORK のサブパラメータ TYPE に合わせて、operand1 を一時データまたは一時ストレージキューの名前(1~8 文字)にすることができます。 TYPE=TD では、operand1 の最初の 4 文字だけが保持されるので、事前に一時データの送り先として CICS を指定しておく必要があります。

ワークファイルの詳細については、「CICS 環境での Natural の出力ファイルおよびワークファイル」(『TP モニタインターフェイス』ドキュメント)も参照してください。

Top of page

Com-plete/SMARTS でのワークファイル名

Com-plete 環境で AM=SMARTS を指定すると、PFS ファイルを利用できます。 まだワークファイル名が Natural に定義されていない場合でも、任意のワークファイル名を割り当てることができます。 次に例を示します。

DEFINE WORK (14) '/nat/path/workfile'
DEFINE WORK (14) 'workfile'

ファイルが SMARTS ポータブルファイルシステムまたはネイティブファイルシステムのどちらにあるかは、SMARTS の MOUNT_FS パラメータによって異なります。 パスの最初の要素(/nat/)により、ターゲットファイルシステムが決定されます。

文字列の先頭がスラッシュ(/)でない場合は、ファイルのパスが環境変数 $NAT_WORK_ROOT から取得されます。

指定したパス名が存在する必要があります。 DEFINE WORK FILE ステートメントを実行すると、ファイルがダイナミックに割り当てられます。 指定したメンバが存在しない場合は、指定した名前の新しいメンバが作成されます。

Top of page