SQL プロシージャーに CALL ステートメントを組み込んで他の SQL プロシージャーを呼び出すことができます。この機能はネストされた ストアード・プロシージャーと呼ばれています。この機能によって、既存の SQL プロシージャーを再使用してもっと複雑なアプリケーションを設計することが可能になります。
呼び出し元 SQL プロシージャー内からターゲット SQL プロシージャーを呼び出すには、呼び出し元の CALL ステートメントに適切な数およびタイプのパラメーターを含めるだけです。ターゲットが OUT パラメーターを戻す場合には、呼び出し元は戻された値を独自のステートメントで使用することができます。
たとえば、 "SALES_TARGET" という名前のターゲット SQL プロシージャーを呼び出し、 INTEGER タイプの単一の OUT パラメーターを受け入れる SQL プロシージャーを、以下のような SQL で作成できます。
CREATE PROCEDURE NEST_SALES(OUT budget DECIMAL(11,2)) LANGUAGE SQL BEGIN DECLARE total INTEGER DEFAULT 0; SET total = 6; CALL SALES_TARGET(total); SET budget = total * 10000; END
ターゲット SQL プロシージャーによって結果セットが戻される場合、呼び出し元またはクライアント・アプリケーションのいずれかが結果セットを受け取ります。どちらが受け取るかは、ターゲット SQL プロシージャーが発行する DECLARE CURSOR ステートメントによって決まります。ターゲット内の WITH RETURN TO CLIENT 文節が含まれている DECLARE CURSOR ステートメントでは、呼び出し元は結果セットを受け取りません。 WITH RETURN TO CLIENT カーソルでは、結果セットはクライアント・アプリケーションに直接戻されます。
ネストされた SQL プロシージャーから結果セットを戻す方法についての詳細は、 呼び出し元またはクライアントへ結果セットを戻すを参照してください。
アプリケーション・アーキテクチャーを設計する際には、以下のような制約事項を念頭に置いてください。
NO SQL 文節で作成された SQL プロシージャーは CALL ステートメントを発行できません。