+----------------------------------IBM 拡張----------------------------------+
LINKAGE TYPE 句を使用して、CANCEL が対象とするプログラムのタイプを指定します。 対象として考えられるのは、プログラム・オブジェクト (*PGM) または ILE プロシージャーです。
CANCEL ステートメントに LINKAGE TYPE 文節が指定されていない場合、 取り消せるプログラムのタイプは SPECIAL-NAMES 段落の LINKAGE TYPE 句、CRTCBLMOD または CRTBNDCBL コマンドの LINKLIT パラメーターのいずれかを指定することにより、変更できます。
+------------------------------End of IBM 拡張-------------------------------+
呼び出し先サブプログラムに CANCEL ステートメントを実行することにより、このサブプログラムとプログラムとの間の論理的な結びつきは終了します。 サブプログラムが記述する外部データ・レコードにあるデータ項目の内容は、サブプログラムが取り消されても変更されません。 このサブプログラムを指定している実行単位中のプログラムが CALL ステートメントを後に実行する場合には、 このサブプログラムには初期状態で入ります。
CANCEL ステートメントは、オープンしているすべての INTERNAL ファイルをクローズします。
呼び出し先サブプログラムは、以下のいずれかの方法で取り消すことができます。
CANCEL ステートメントは、指定されたプログラムだけで実行されるものであって、 取り消されたプログラムによって呼び出し先プログラムでは実行されません。
呼び出し先サブプログラムの中に CANCEL ステートメントが入っていてもかまいません。 また、呼び出し先サブプログラムには、 その呼び出し側プログラムや、呼び出し階層でそれ自体より上位にある他のプログラムを、直接または間接的に取り消す CANCEL ステートメントがあってはなりません。 呼び出し先サブプログラムがその呼び出し側プログラムを取り消そうとすると、 そのサブプログラムにある CANCEL ステートメントは無視されます。
CANCEL ステートメントに指定するプログラムは、 一度呼び出されたが、まだ制御が呼び出し側プログラムへ戻されていないプログラムを参照することができません。 たとえば、次のとおりです。
A が B を呼び出し、B が C を呼び出す (A が制御を受け取った時点で、 C を取り消すことができる) A が B を呼び出し、A が C を呼び出す (C が制御を受け取った時点で、 it can cancel B.)
実行単位の中で呼び出されていないプログラムの名前を CANCEL ステートメントで指定したり、 あるいは呼び出されはしたがすでに取り消されているプログラムの名前を指定した CANCEL ステートメントを実行しても、何も行われません。 どちらの場合も、制御は次のステートメントへ移ります。
プロシージャーおよびプログラム・オブジェクトの取り消しの詳細 は、「WebSphere Development Studio: ILE COBOL プログラマーの手引き」を参照してください。