プロシージャーが終了するのは、プロシージャー参照以外の方法で、 呼び出し側プログラム、呼び出し側ブロックに制御を戻したとき、 または別のアクティブ・ブロックに制御を渡したときです。
次の場合は、プロシージャーは正常に 終了します。
GO TO ステートメントを使用してプロシージャーの外へ制御権を移動すると、 場合によっては、いくつかのプロシージャーや開始ブロックが終了することが あります。 具体的に言えば、GO TO ステートメントで指定した移動先の場所が、終了しようとしているブロックを直接活動化したのではないブロックに含まれている場合には、活動化の順序においてその 2 つのブロックの間にあるすべてのブロックが終了します。 次に例を示します。
A: procedure options(main);
statement-1
statement-2
B: begin;
statement-b1
statement-b2
call C;
statement-b3
end B;
statement-3
statement-4
C: procedure;
statement-c1
statement-c2
statement-c3
D: begin;
statement-d1
statement-d2
go to Lab;
statement-d3
end D;
statement-c4
end C;
statement-5
Lab: statement-6
statement-7
end A;
A は B を、B は C を、 C は D を、それぞれ活動化します。 D の中の go to Lab ステートメントは、 A の中の statement-6 に制御を移します。 このステートメントは、D、C、 または B には含まれていないので、 この 3 つのブロックがすべて終了します。 A は活動化されたままです。 したがって、D の外へ制御権を移動することによって、 ブロック D が終了するだけでなく、 介在している B と C も終了します。