<x:procedureCall>

x:procedureCall 動作用來呼叫儲存程序。如果儲存程序產生了任何結果集,它們的列會快取在應用程式伺服器機器的記憶體內。 其中的一個結果集(剛開始是第一個結果集),一律被視為現行結果集。而每個結果集的其中一列(剛開始是第一列),一律被視為現行列。

使用這個動作會建立一個 DBProcedureCall Bean,您可以利用 id 屬性指定其名稱的變數來存取這個 Bean。

JSP 動作可利用 DBProcedureCall Bean 的基本功能。如果 Call 陳述式有參數的話,您可以利用 x:getParameter 和 x:parameter 動作來存取它們。您可以利用 x:nextResultSet 和 x:previousResultSet 來定位在多個結果集之間, 以及利用 x:nextRowx:previousRow 來定位到結果集中的其他列上。您可以利用 x:getColumn 動作來存取結果集中的直欄值。(您必須先定位到特定結果集,再處理它的直欄。) 和 x:select 動作所產生的結果集不同,您不能利用 x:update、x:delete 和 x:insert 動作來變更由 x:procedureCall 所產生之結果集中的列。

DBProcedureCall Bean 的所有方法都可以利用 Scriptlet 來執行,且它的所有內容都可以利用標準 jsp:getPropertyjsp: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 動作有下列屬性:

id
用來在指定的名稱空間中識別 DBProcedureCall Bean 及其 Scripting 變數名稱的名稱。指定的名稱會區分大小寫,且必須符合現行 Scripting 語言變數命名慣例。
scope
在其中定義物件的名稱空間。 預設值是 page。
connectionSpec
這是 x:dataSourceSpecx:driverManagerSpec 動作的 ID。這個值會區分大小寫,且必須符合在範圍內的 connectionSpec 動作。

所參照的動作會提供建立資料庫連線所需要的資訊。 如果動作是發生在 x:batch 動作的主體內,請略過這個屬性,這時會使用 x:batch 動作中所識別的 connectionSpec 動作。如果您在兩個位置中指定它,且其值不符,就會出現錯誤旗標。

connectionSpecRef
這是一個指向 DBConnectionSpec 物件的參照,用來取得建立連線所需要的資訊。

您可以指定 connectionSpec 或 connectionSpecRef,但不能同時指定這兩者。

maxFieldSize
指定結果集中任何直欄的大小上限(位元組)。0 值表示沒有上限。預設值是 0。
maxRows
指定每個結果集可提取至快取記憶體的列數上限。0 值表示沒有上限。預設值是 0。
distinctTypesEnabled
是否要針對含使用者定義(不同)類型的結果集啟用插入、更新和刪除等動作。 預設值是 False。
timeOut
這是執行陳述式時所允許的秒數上限。預設值是 0,表示沒有上限。
readOnly
指定是否容許資料更新。true 值表示不容許更新,即使資料庫管理程式允許也是如此。false 值表示容許更新,不過,必須先得到資料庫管理程式的許可。 預設值是 false。
nullToken
指定要用來代表資料庫空值的字串值,會區分大小寫。 這個屬性是選用的。 它會作為在這個 ProcedureCall 中取得或設定直欄或參數值的任何動作之相同屬性的預設值。 如果兩個位置都略過屬性的話,預設值就是 &empty。(&empty 是一個類似於 HTML 字元實體的特殊值,在這個屬性中,被識別為代表空字串。) 請參閱空值,以取得空值表示法的詳細資料。
trace
這是指是否要啟用資料庫動作的追蹤。 預設值是 False。

x:procedureCall 動作的主體中可以有下列標示:

<x:sql>
這指定要執行的 SQL 陳述式。
<x:parameter>
這指定 Call 陳述式中之參數的值和 Meta 資料。 在 x:parameter 標示和 Call 陳述式各參數之間,必須有一對一的關係。

範例

下列動作會建立一個名稱為 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"/>
使用條款 | 讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.