x:procedureCall 動作用來呼叫儲存程序。如果儲存程序產生了任何結果集,它們的列會快取在應用程式伺服器機器的記憶體內。 其中的一個結果集(剛開始是第一個結果集),一律被視為現行結果集。而每個結果集的其中一列(剛開始是第一列),一律被視為現行列。
使用這個動作會建立一個 DBProcedureCall Bean,您可以利用 id 屬性指定其名稱的變數來存取這個 Bean。
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 的所有方法都可以利用 Scriptlet 來執行,且它的所有內容都可以利用標準 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、範圍為 session 的 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>員工編號: <x:getParameter name="proc1" parmName="EMPNO"/> <br>姓名: <x:getParameter name="proc1" parmName="NAME"/> <br>部門: <x:getParameter name="proc1" parmName="DEPT"/> <br>電話號碼: <x:getParameter name="proc1" parmName="PHONENO"/>
下列動作會建立一個名稱為 proc2、範圍為 session 的 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>員工編號: <x:getColumn name="proc2" colName="EMPNO"/> <br>姓名: <x:getColumn name="proc2" colName="NAME"/> <br>部門: <x:getColumn name="proc2" colName="DEPT"/> <br>電話號碼: <x:getColumn name="proc2" colName="PHONENO"/>