USE ステートメントのフォーマットには、次のものがあります。
宣言の全般的な情報については、宣言部分を参照してください。
EXCEPTION/ERROR 宣言は、標準のシステム・プロシージャーの他に実行される、 入出力例外処理やエラー処理のためのプロシージャーを指定します。
EXCEPTION ワードと ERROR ワードは、 同義語でそれぞれ入れ替えて使用することができます。
フォーマット 1: EXCEPTION/ERROR 宣言の USE ステートメント >>-USE--+--------+--AFTER--+----------+--+-EXCEPTION-+----------> '-GLOBAL-' '-STANDARD-' '-ERROR-----' .---------. V | >--PROCEDURE--+----+--+---ファイル名-1-+-+-------------------------->< '-ON-' +-INPUT-------+ +-OUTPUT------+ +-I-O---------+ '-EXTEND------'
ファイルの名前を指定した USE AFTER EXCEPTION/ERROR 宣言ステートメントは、 ファイルのオープン・モードを指定する宣言ステートメントを優先します。
EXCEPTION/ERROR プロシージャーは、次のいずれかの場合に実行されます。
EXCEPTION/ERROR プロシージャーの実行後、制御は、 入出力制御システム内の呼び出しルーチンに戻されます。 入出力状況値が重大な入出力エラーを示していない場合には、 入出力制御システムは、 例外条件を引き起こした実行の入出力ステートメントに続く、 次の実行可能ステートメントに制御を戻します。
READ、WRITE、REWRITE、START、OPEN、CLOSE、 または DELETE の各ステートメントの実行中に入出力エラーが生じたときに、 該当する EXCEPTION/ERROR プロシージャーがアクティブになります。 どのような条件がエラーであるかを判別するには、共通の処理機能を参照してください。
次の規則が宣言型プロシージャーに適用されます。
すでに呼び出されていて、まだ制御権を持っている 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 プロシージャーは、入出力エラーが発生したときに、ファイル状況キーの値を調べるために使用できます。
プログラムが他のプログラムに含まれるときは、特別の優先規則に従います。これらの規則を適用するときは、最初の修飾宣言のみを実行のために選択する必要があります。宣言を選択するときの優先順位は、次のとおりです。
最後に最外部のプログラムが検査されるまで、あるいは修飾する宣言が検索できるまで、ステップ 3 およびステップ 4 を繰り返します。
LABEL 宣言を使用することによって、ユーザーのラベル手順を指定することができます。
フォーマット 2: LABEL 宣言の USE ステートメント >>-USE--+--------+--AFTER--+----------+--+-----------+----------> '-GLOBAL-' '-STANDARD-' +-BEGINNING-+ '-ENDING----' .---------. V | >--+------+--LABEL PROCEDURE--+----+--+---ファイル名-1-+-+---------->< +-FILE-+ '-ON-' +-INPUT-------+ +-REEL-+ +-OUTPUT------+ '-UNIT-' +-I-O---------+ '-EXTEND------'
ラベルは、そのファイルに対するファイル記述項目の中の LABEL RECORDS 節でデータ名としてリストされていなければならず、 ファイル項目に従属するレベル 01 のデータ項目として記述されていなければなりません。
BEGINNING も ENDING も指定しなければ、指定のプロシージャーは、 開始ラベルと終了ラベルの両方について実行されます。
FILE、REEL、または UNIT が指定されていなければ、指定のプロシージャーは、 REEL または UNIT のどちらかの適切なラベルと、 FILE ラベルの 2 つについて実行されます。
REEL オプションは、直接アクセス・ファイルには適用できません。
UNIT 句は、ランダム・アクセス・モードのファイルには適用できません。 このモードでは FILE ラベルだけが処理されるためです。
ファイル名-1 は、ソート・ファイルを表すことはできません。
ファイル名-1 のオプションを使用する場合、 ファイル名に対するファイル記述項目は、LABEL RECORDS ARE OMITTED 節を指定できません。
INPUT、OUTPUT、または I-O のオプションを指定している場合、 ユーザー・ラベル・プロシージャーは、次のように実行されます。
INPUT、OUTPUT、または I-O のいずれかの句を指定した場合で、 それぞれ対応して入力ファイル、出力ファイル、または入出力ファイルが、 LABEL RECORDS ARE OMITTED 節を指定して記述されているならば、 USE プロシージャーは適用されません。 標準システム・プロシージャーが実行されるのは、次のような時点です。
USE 宣言のプロシージャーにおいて、 その中の USE 文がファイル名 以外のオプションを指定している場合は、 共通ラベル項目を参照する際にファイル名で修飾する必要はありません。共通ラベル項目は、 プログラムのすべてのラベル・レコードの中に現れる基本データ項目であっても、 そのプログラムのデータ・レコードには現れません。 そのような項目は、 各ラベル・レコードの中で同一の記述と位置を持つ必要があります。
宣言セクションの中では、どのような非宣言型プロシージャーも参照することができません。逆に、非宣言部分では、 宣言セクションの中に現れるプロシージャー名を参照することができません。 ただし、PERFORM ステートメントは、USE プロシージャーまたはそれに関連したプロシージャーを参照することができます。
コンパイラーは、宣言セクションからの出口をそのセクションの最後のステートメントの後に挿入します。そのセクション内のすべての論理処理のパスは、 その出口点に導かれなければなりません。
ただし例外が 1 つあります。 特殊出口は、GO TO MORE-LABELS ステートメントで指定できます。 このステートメントによって、宣言セクションからの出口が作られると、 システムは次のどちらかの処置を行います。
ユーザー・ラベルに対して GO TO MORE-LABELS ステートメントを実行しない場合には、 すぐ後に検査または作成すべきユーザー・ラベルがあっても宣言セクションに再入することはありません。
デバッグ・セクションは、最外部のプログラムでのみ可能です。 ネストされているプログラム内では無効になります。デバッグ・セクションは、 ネストされたプログラムに含まれるプロシージャーによって起動されることはありません。
デバッグ・セクションは、以下のものは無効です。
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 は、有効な各オプションについて、プログラム実行のどの時点で USE FOR DEBUGGING プロシージャーが実行されるかを示します。
いかなるプロシージャー名も、1 つの USE FOR DEBUGGING 文の中にしか現れてはならず、 その文の中で一度しか使用できません。 すべてのプロシージャーは、最外部のプログラムの中に記述しなければなりません。