サブプロシージャーとは、メイン・ソース・セクションの後に定義されるプロシージャーです。
サブプロシージャーは、サイクル・メイン・プロシージャーと異なる点がいくつかあります。 その中でも大きな違いは、サブプロシージャーでは実行中に RPG サイクルを使用しない (使用できない) という点です。
メイン・ソース・セクションの定義仕様書の中に、サブプロシージャーの対応プロトタイプを指定することができます。 このプロトタイプが指定された場合、これは、プログラムまたはプロシージャーを正しく呼び出し、呼び出 し元が確実に正しいパラメーターを渡せるように、コンパイラーによって使用されます。 指定されない場合、プロシージャーはプロシージャー・インターフェースから暗黙的に生成されます。
プロシージャーを定義したモジュール内では、プロトタイプの指定はオプションですが、 プロシージャーがモジュールからエクスポートされて、他の RPG モジュールから呼び出される場合には、オプションにはなりません。 この場合には、プロトタイプをコピー・ファイルに指定して、 サブプロシージャーを定義したモジュール、およびサブプロシージャーを呼び出すすべてのモジュールにコピーする必要があります。
以下に示すのは、各構成部分を分かりやすく表示したサブプロシージャーの例です。
最初に自由形式定義を使用する例を示し、2 番目に固定形式を使用する例を
示します。 
このプロシージャーは、値パラメーターとして渡される 3 つの数値に対して関数を
実行します。
この例は、プロシージャーに対してプロシージャー・インターフェースがどのように
指定されるのか、および、値がプロシージャーからどのように戻されるのかを示しています。 
// Prototype for procedure FUNCTION
DCL-PR Function INT(10); 1
TERM1 INT(5) VALUE;
TERM2 INT(5) VALUE;
TERM3 INT(5) VALUE;
END-PR;
DCL-PROC Function; 2
DCL-PI *N INT(10); 3
TERM1 INT(5) VALUE;
TERM2 INT(5) VALUE;
TERM3 INT(5) VALUE;
END-PI;
DCL-S Result INT(10); 4
Result = Term1 ** 2 * 17
+ Term2 * 7 5
+ Term3;
return Result * 45 + 23;
END-PROC; 6
* Prototype for procedure FUNCTION
D FUNCTION PR 10I 0 1
D TERM1 5I 0 VALUE
D TERM2 5I 0 VALUE
D TERM3 5I 0 VALUE
P Function B 2
D Function PI 10I 0 3
D Term1 5I 0 VALUE
D Term2 5I 0 VALUE
D Term3 5I 0 VALUE
D Result S 10I 0 4
Result = Term1 ** 2 * 17
+ Term2 * 7 5
+ Term3;
return Result * 45 + 23;
P E 6
プロシージャー仕様の開始。 
他のローカル定義。 
プロシージャー仕様の終了。 
定義仕様書のどこにでも入れることができるプロシージャー・インターフェース定 義を除き、サブプロシージャーは上記の順序でコーディングしなければなりま せん。
演算仕様書は一度だけ処理され、演算仕様書の終わりでプロシージャーに戻ります。 詳しくは、サブプロシージャー演算を参照してください。
サブプロシージャーはエクスポートすることができますが、これは、プログラム 内の他のモジュールにあるプロシージャーでそれを呼び出すことができることを 意味します。 サブプロシージャーがエクスポートされることを指示するためには、プロシージャーの始めの指定でキーワード EXPORT を指定してください。 これを指定しなかった場合には、サブプロシージャーはモジュールの中からしか 呼び出すことができません。