x:procedureCall アクションは、ストアード・プロシージャーの呼び出しに使用されるものです。 ストアード・プロシージャーが結果セットを作成した場合は、 アプリケーション・サーバー・マシン上のメモリー内のキャッシュに結果セットの行が入れられます。 結果セットの 1 つ、すなわち最初に 1 番目であったセットが常に、現在の結果セットとみなされます。 それぞれの結果セットの中の行の 1 つ、すなわち最初に 1 番目であった行は常に、現在行とみなされます。
このアクションを使用して DBProcedureCall Bean を作成します。 この Bean には、名前が id 属性の中に指定されている変数を使用してアクセスすることができます。
JSP アクションは、DBProcedureCall Bean の基本関数を利用するために提供されているものです。 Call ステートメントにパラメーターがある場合は、x:getParameter および x:parameter アクションを使用してパラメーターにアクセスすることができます。 複数の結果セット間の位置付けには x:nextResultSet および x:previousResultSet を、現在の結果セットの中の行への位置付けには x:nextRow および x:previousRow を使用することができます。 x:getColumn アクションを使用して、結果セットの中の桁値にアクセスすることができます。 (特定結果セットの桁にアクセスする前には、その結果セットに位置付けしている必要があります。) x:select アクションによって作成された結果セットの場合とは異なり、x:update、x:delete、および x:insert アクションを使用して、x:procedureCall によって作成された結果セットの中の行を変更することはできません。
DBProcedureCall Bean のメソッドは全部、スクリプトレットを使用して実行することもでき、 そのプロパティーの全部に標準の jsp:getProperty および jsp:setProperty アクションを使用してアクセスすることもできます。
<x:procedureCall id = "name" scope = "page|request|session" connectionSpec = "connectionSpec_id" connectionSpecRef = "connectionSpecRef" maxFieldSize = "numberOfBytes" maxRows = "numberOfRows" distinctTypesEnabled = "true|false" timeOut = "seconds" readOnly = "true|false" nullToken = "string" trace = "true|false" > <x:sql> </x:sql> <x:parameter parmName = "name" position = "number" type = "sqltype" mode = "in|out|inout" value = "parmValue" /> </x:procedureCall>
x:procedureCall アクションには以下の属性があります。
参照アクションにより、データベースへの接続に必要な情報が提供されます。 このアクションが x:batch アクションの本体内部で発生する場合は、この属性を省略してください。 その場合は x:batch アクションの中で識別された connectionSpec アクションが使用されます。 この属性を両方の場所で指定し、しかも値が一致していない場合、この属性にはエラーのフラグが付けられます。
connectionSpec または connectionSpecRef のいずれかを指定することができますが、両方を指定することはできません。
x:procedureCall アクションは、その本体内に以下のタグをもつことができます。
以下のアクションは、名前が proc1 で、そのスコープがセッションである DBProcedureCall Bean を作成するものです。 conn1 の中の情報を使用してデータベースへの接続が行われます。ストアード・プロシージャーは、 従業員番号を含む入力パラメーターを受け入れ、従業員名、部門、および電話番号を含む出力パラメーターを戻します。 例では、x:getParameter アクションを使用して出力パラメーターが要求出力に書き出されます。 x:parameter アクションの詳細については、<x:parameter>を参照してください。x:getParameter アクションの詳細については、<x:getParameter>を参照してください。
<x:procedureCall id="proc1" scope="session" connectionSpec="conn1" > <x:sql>{ CALL empinfo1(:EMPNO, :NAME, :DEPT, :PHONENO) } </x:sql> <x:parameter parmName="EMPNO" mode="in" type="INTEGER" value='<%= request.getParameter("empno") %>' /> <x:parameter parmName="NAME" mode="out" type="VARCHAR" /> <x:parameter parmName="DEPT" mode="out" type="VARCHAR" /> <x:parameter parmName="PHONENO" mode="out" type="VARCHAR" /> </x:procedureCall> ... <br>Employee number: <x:getParameter name="proc1" parmName="EMPNO"/> <br>Name: <x:getParameter name="proc1" parmName="NAME"/> <br>Department: <x:getParameter name="proc1" parmName="DEPT"/> <br>Phone number: <x:getParameter name="proc1" parmName="PHONENO"/>
以下のアクションは、名前が proc2 で、そのスコープがセッションである DBProcedureCall Bean を作成するものです。 ストアード・プロシージャーは、 従業員番号を含む入力パラメーターを受け入れ、従業員番号、名前、部門、および電話番号を含む桁をもつ単一行結果セットを戻します。 入力パラメーターは要求パラメーター値に設定され、Call ステートメントが実行されます。この例では、x:getColumn アクションを使用して結果セット桁値が要求出力に書き出されます。 x:parameter アクションの詳細については、<x:parameter>を参照してください。x:getParameter アクションの詳細については、<x:getParameter>を参照してください。
<x:metaData id="empinfo" xmlref="empinfo.xml" /> ... <x:procedureCall id="proc2" scope="session" connectionSpec="conn1" metaData="empinfo.xml"> <x:sql>CALL empinfo2(:EMPNO)</x:sql> <x:parameter parmName="EMPNO" mode="in" type="INTEGER" value='<%= request.getParameter("empno") %>' /> </x:procedureCall> ... <br>Employee number: <x:getColumn name="proc2" colName="EMPNO"/> <br>Name: <x:getColumn name="proc2" colName="NAME"/> <br>Department: <x:getColumn name="proc2" colName="DEPT"/> <br>Phone number: <x:getColumn name="proc2" colName="PHONENO"/>