Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


USE ステートメント

USE ステートメントのフォーマットには、次のものがあります。

宣言の全般的な情報については、宣言部分を参照してください。

EXCEPTION/ERROR 宣言

EXCEPTION/ERROR 宣言は、標準のシステム・プロシージャーの他に実行される、 入出力例外処理やエラー処理のためのプロシージャーを指定します。

EXCEPTION ワードと ERROR ワードは、 同義語でそれぞれ入れ替えて使用することができます。

構文図を読む構文図をスキップする
フォーマット 1: EXCEPTION/ERROR 宣言の USE ステートメント 

>>-USE--+--------+--AFTER--+----------+--+-EXCEPTION-+---------->
        '-GLOBAL-'         '-STANDARD-'  '-ERROR-----'   

                        .---------.     
                        V         |     
>--PROCEDURE--+----+--+---ファイル名-1-+-+--------------------------><
              '-ON-'  +-INPUT-------+   
                      +-OUTPUT------+   
                      +-I-O---------+   
                      '-EXTEND------'   

ファイル名-1
すべてのファイルに対して有効です。 このオプションを指定すると、指定したファイルに対してのみプロシージャーが実行されます。ファイル名は、ソート・ファイルやマージ・ファイルを参照することはできません。 どのファイルについても、指定できるのは、 1 つの EXCEPTION/ERROR プロシージャーだけです。 したがって、ファイル名の指定によって、 複数の EXCEPTION/ERROR プロシージャーの実行を同時に要求することはできません。

ファイルの名前を指定した USE AFTER EXCEPTION/ERROR 宣言ステートメントは、 ファイルのオープン・モードを指定する宣言ステートメントを優先します。

INPUT
すべてのファイルに対して有効です。 このオプションを指定すると、INPUT モードでオープンされた場合、 または INPUT モードでオープンされる途中でエラーを起こした場合は、 すべてのファイルに対してプロシージャーが実行されます。
OUTPUT
すべてのファイルに対して有効です。 このオプションを指定すると、OUTPUT モードでオープンされた場合、 または OUTPUT モードでオープンされる途中でエラーを起こした場合は、 すべてのファイルに対してプロシージャーが実行されます。
I-O
すべての直接アクセス・ファイルに対して有効です。 このオプションを指定すると、I-O モードでオープンされた場合、 または I-O モードでオープンされる途中でエラーを起こした場合は、 すべてのファイルに対してプロシージャーが実行されます。
EXTEND
すべてのファイルに対して有効です。 このオプションを指定すると、EXTEND モードでオープンされた場合、 または EXTEND モードでオープンされる途中でエラーを起こした場合は、 すべてのファイルに対してプロシージャーが実行されます。

EXCEPTION/ERROR プロシージャーは、次のいずれかの場合に実行されます。

  • システム定義の入出力エラー・ルーチンの実行の完了後。
  • 入出力ステートメントに INVALID KEY 句または AT END 句の指定がなく、 INVALID KEY 条件または AT END 条件が検出された場合。
  • ファイル状況キー 1 を 9 に設定する IBM 定義の条件が検出された場合 (ファイル状況キーを参照)。

EXCEPTION/ERROR プロシージャーの実行後、制御は、 入出力制御システム内の呼び出しルーチンに戻されます。 入出力状況値が重大な入出力エラーを示していない場合には、 入出力制御システムは、 例外条件を引き起こした実行の入出力ステートメントに続く、 次の実行可能ステートメントに制御を戻します。

READ、WRITE、REWRITE、START、OPEN、CLOSE、 または DELETE の各ステートメントの実行中に入出力エラーが生じたときに、 該当する EXCEPTION/ERROR プロシージャーがアクティブになります。 どのような条件がエラーであるかを判別するには、共通の処理機能を参照してください。

次の規則が宣言型プロシージャーに適用されます。

  • 宣言型プロシージャーを非宣言型プロシージャーから実行できます。
  • 非宣言型プロシージャーを宣言型プロシージャーから実行できます。
  • 宣言型プロシージャーは、宣言型プロシージャー中の GO TO ステートメント中で参照できます。
  • 非宣言型プロシージャーは、宣言型プロシージャー中の GO TO ステートメント中で参照できます。

すでに呼び出されていて、まだ制御権を持っている USE プロシージャーを実行させるような ステートメントがあっても構いません。ただし、無限ループを起こさないように、 下部に最終的な出口が確実にあるように注意してください。

READ、WRITE、または REWRITE ステートメントでの QSAM 異常終了のために、EXCEPTION/ERROR 宣言がアクティブになっている場合、GOBACK ステートメントまたは STOP RUN ステートメントは使用できません。READ、WRITE、または REWRITE ステートメントでの QSAM 異常終了のために、EXCEPTION/ERROR 宣言がアクティブになっている場合、ネストなしサブプログラムで EXIT PROGRAM ステートメントを使用できません。READ、WRITE、または REWRITE ステートメントの実行時に QSAM 異常終了が発生すると、ファイル状況コードが「34」または「90」となることがあります。

ネストされたプログラムで宣言がアクティブになっている場合は、GOBACK ステートメントまたは EXIT PROGRAM ステートメントを使用することはできません。メソッドで宣言がアクティブになっている場合は、GOBACK ステートメントまたは EXIT METHOD ステートメントを使用することはできません。

EXCEPTION/ERROR プロシージャーは、入出力エラーが発生したときに、ファイル状況キーの値を調べるために使用できます。

ネストされたプログラムの優先規則

プログラムが他のプログラムに含まれるときは、特別の優先規則に従います。これらの規則を適用するときは、最初の修飾宣言のみを実行のために選択する必要があります。宣言を選択するときの優先順位は、次のとおりです。

  1. 修飾条件を引き起こしたステートメントを含んでいるプログラム内のファイル特定の宣言 (つまり、 USE AFTER ERROR ON ファイル名-1 形式の宣言)。
  2. 修飾条件を引き起こしたステートメントを含んでいるプログラム内のモード特定の宣言 (つまり、 USE AFTER ERROR ON INPUT 形式の宣言)。
  3. GLOBAL 句を指定しており、 かつ修飾条件に関して最後に調べられたプログラムを直接的に含んでいるプログラム内にあるファイル特定の宣言。
  4. GLOBAL 句を指定しており、 かつ修飾条件に関して最後に調べられたプログラムを直接的に含んでいるプログラム内にあるモード特定の宣言。

最後に最外部のプログラムが検査されるまで、あるいは修飾する宣言が検索できるまで、ステップ 3 およびステップ 4 を繰り返します。

LABEL 宣言

LABEL 宣言を使用することによって、ユーザーのラベル手順を指定することができます。

構文図を読む構文図をスキップする
フォーマット 2: LABEL 宣言の USE ステートメント 

>>-USE--+--------+--AFTER--+----------+--+-----------+---------->
        '-GLOBAL-'         '-STANDARD-'  +-BEGINNING-+   
                                         '-ENDING----'   

                                        .---------.     
                                        V         |     
>--+------+--LABEL PROCEDURE--+----+--+---ファイル名-1-+-+----------><
   +-FILE-+                   '-ON-'  +-INPUT-------+   
   +-REEL-+                           +-OUTPUT------+   
   '-UNIT-'                           +-I-O---------+   
                                      '-EXTEND------'   

AFTER
標準ファイル・ラベルの後にユーザー・ラベルが付き、それが処理されます。

ラベルは、そのファイルに対するファイル記述項目の中の LABEL RECORDS 節でデータ名としてリストされていなければならず、 ファイル項目に従属するレベル 01 のデータ項目として記述されていなければなりません。

BEGINNING も ENDING も指定しなければ、指定のプロシージャーは、 開始ラベルと終了ラベルの両方について実行されます。

FILE、REEL、または UNIT が指定されていなければ、指定のプロシージャーは、 REEL または UNIT のどちらかの適切なラベルと、 FILE ラベルの 2 つについて実行されます。

FILE
指定のプロシージャーは、ファイルの開始 (最初のボリューム) とファイルの終了 (最後のボリューム)、またはそのどちらか一方で実行されます。
REEL
指定のプロシージャーは、ボリューム開始 (最初のボリュームを除く各ボリューム) とボリューム終了 (最後のボリュームを除く各ボリューム)、またはそのどちらか一方で実行されます。

REEL オプションは、直接アクセス・ファイルには適用できません。

UNIT
指定のプロシージャーは、ボリューム開始 (最初のボリュームを除く各ボリューム) とボリューム終了 (最後のボリュームを除く各ボリューム)、またはそのどちらか一方で実行されます。

UNIT 句は、ランダム・アクセス・モードのファイルには適用できません。 このモードでは FILE ラベルだけが処理されるためです。

ファイル名-1
さまざまな配置のフォーマットに指定することができます。 ただし、USE ステートメントにおけるファイル名の指定が、 2 つ以上の USE 宣言の実行を同時に要求するものであってはなりません。

ファイル名-1 は、ソート・ファイルを表すことはできません。

ファイル名-1 のオプションを使用する場合、 ファイル名に対するファイル記述項目は、LABEL RECORDS ARE OMITTED 節を指定できません。

INPUT、OUTPUT、または I-O のオプションを指定している場合、 ユーザー・ラベル・プロシージャーは、次のように実行されます。

  • INPUT を指定したときは、 INPUT としてオープンしたファイルに対してだけ実行されます。
  • OUTPUT を指定したときは、 OUTPUT としてオープンしたファイルに対してだけ実行されます。
  • I-O を指定したときは、 I-O としてオープンしたファイルに対してだけ実行されます。
  • EXTEND を指定したときは、 EXTEND としてオープンしたファイルに対してだけ実行されます。

INPUT、OUTPUT、または I-O のいずれかの句を指定した場合で、 それぞれ対応して入力ファイル、出力ファイル、または入出力ファイルが、 LABEL RECORDS ARE OMITTED 節を指定して記述されているならば、 USE プロシージャーは適用されません。 標準システム・プロシージャーが実行されるのは、次のような時点です。

  • 開始または終了の入力ラベル・チェック・プロシージャーが実行される前。
  • 開始または終了の出力ラベルが作成される前。
  • 開始または終了の出力ラベルが作成されてから、 テープに書き込まれるまでの間。
  • 開始または終了の入出力ラベル・チェック・プロシージャーが実行される前。

USE 宣言のプロシージャーにおいて、 その中の USE 文がファイル名 以外のオプションを指定している場合は、 共通ラベル項目を参照する際にファイル名で修飾する必要はありません。共通ラベル項目は、 プログラムのすべてのラベル・レコードの中に現れる基本データ項目であっても、 そのプログラムのデータ・レコードには現れません。 そのような項目は、 各ラベル・レコードの中で同一の記述と位置を持つ必要があります。

宣言セクションの中では、どのような非宣言型プロシージャーも参照することができません。逆に、非宣言部分では、 宣言セクションの中に現れるプロシージャー名を参照することができません。 ただし、PERFORM ステートメントは、USE プロシージャーまたはそれに関連したプロシージャーを参照することができます。

コンパイラーは、宣言セクションからの出口をそのセクションの最後のステートメントの後に挿入します。そのセクション内のすべての論理処理のパスは、 その出口点に導かれなければなりません。

ただし例外が 1 つあります。 特殊出口は、GO TO MORE-LABELS ステートメントで指定できます。 このステートメントによって、宣言セクションからの出口が作られると、 システムは次のどちらかの処置を行います。

  • 現在の開始ラベルまたは終了ラベルを書き込み、 さらにラベルを作成するために USE セクションの先頭に再入します。 最後のラベルを作成し終わると、 ユーザーはそのセクションの最後のステートメントを実行して終了しなくてはなりません。
  • 追加の開始ラベルまたは終了ラベルを読み取り、 さらにラベルを検査するために USE セクションの先頭に再入します。 ユーザー・ラベルを処理しているときは、 検査すべき別のユーザー・ラベルがある場合にのみ、このセクションに再入します。 したがって、 セクションの最後のステートメントを通って流れるプログラム・パスがある必要はありません。

ユーザー・ラベルに対して GO TO MORE-LABELS ステートメントを実行しない場合には、 すぐ後に検査または作成すべきユーザー・ラベルがあっても宣言セクションに再入することはありません。

DEBUGGING 宣言

デバッグ・セクションは、最外部のプログラムでのみ可能です。 ネストされているプログラム内では無効になります。デバッグ・セクションは、 ネストされたプログラムに含まれるプロシージャーによって起動されることはありません。

デバッグ・セクションは、以下のものは無効です。

  • メソッド
  • RECURSIVE 属性で定義されたプログラム
  • THREAD コンパイラー・オプションを指定してコンパイルしたプログラム

SOURCE-COMPUTER 段落の WITH DEBUGGING MODE 節は、 コンパイルされてオブジェクト・コードに含まれているすべてのデバッグ・セクションとデバッグ行をアクティブにします。詳細については、ソース言語のデバッグを参照してください。

WITH DEBUGGING MODE 節を指定せずにデバッグ・モードを抑止したときは、 すべての USE FOR DEBUGGING 宣言型プロシージャーおよびすべてのデバッグ行は動作を禁止されます。

デバッグ・セクションの中にあるステートメントによって、 デバッグ・セクションの実行が自動的に引き起こされることはありません。

構文図を読む構文図をスキップする
フォーマット 3: DEBUGGING 宣言の USE ステートメント 

                                      .------------.     
                                      V            |     
>>-USE--+-----+--DEBUGGING--+----+--+---プロシージャー名-1-+-+---------><
        '-FOR-'             '-ON-'  '-ALL PROCEDURES-'   

USE FOR DEBUGGING
すべてのデバッグ用ステートメントを 1 つのセクションにまとめて、 DECLARATIVES ヘッダーのすぐ後に書き込まなければなりません。

USE FOR DEBUGGING 文そのものを除き、デバッグ・プロシージャー内では非宣言型プロシージャーを参照することはできません。

プロシージャー名-1
デバッグ・セッションの中で定義することはできません。

表 1 は、有効な各オプションについて、プログラム実行のどの時点で USE FOR DEBUGGING プロシージャーが実行されるかを示します。

いかなるプロシージャー名も、1 つの USE FOR DEBUGGING 文の中にしか現れてはならず、 その文の中で一度しか使用できません。 すべてのプロシージャーは、最外部のプログラムの中に記述しなければなりません。

ALL PROCEDURES
プロシージャー名-1 は、USE FOR DEBUGGING 文の中で指定することはできません。ALL PROCEDURES 句は、プログラムの中で一度だけ指定できます。 最外部プログラムに置かれたプロシージャーだけが、 デバッグ・セクションの実行を起動できます。

表 1. デバッグ宣言の実行
USE FOR DEBUGGING オペランド USE FOR DEBUGGING プロシージャーが直ちに実行される
プロシージャー名-1 指定されたプロシージャーの実行前。

指定したプロシージャーを参照している ALTER ステートメントの実行後。

ALL PROCEDURES 最外部プログラム内の各非デバッグ・プロシージャーのそれぞれの実行前。

最外部プログラム内の各 ALTER ステートメント (宣言型プロシージャーの中の ALTER ステートメントは除く) の実行後。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)