<x:procedureCall>

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 アクションには以下の属性があります。

id
指定されている名前空間の中の DBProcedureCall Bean の識別と、 そのスクリプト記述変数名の識別にも使用される名前。 指定する名前には大/小文字の区別があり、 名前はスクリプト記述言語の変数の名前指定の現行規則に従ったものとしなくてはなりません。
scope
名前空間であり、この範囲内でオブジェクトが定義されます。デフォルト値は page です。
connectionSpec
x:dataSourceSpec または x: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
大/小文字が区別されるストリング値を指定します。この値はデータベースの NULL 値を表すために使用されます。 この属性はオプションです。この属性は、この ProcedureCall 上の桁またはパラメーターの値の取得と設定を行う任意のアクション上の同じ属性のデフォルト値として使用されます。 両方の場所でこの属性が省略された場合のデフォルトは &empty です。 (&empty は HTML 文字エンティティーに類似した特殊値であり、この属性では空ストリングを表すものとして認識されます。) NULL 値の表記の詳細については、『NULL 値』を参照してください。
trace
データベース・アクションのトレースが行えるようにするかどうかを指定します。デフォルト値は False です。

x:procedureCall アクションは、その本体内に以下のタグをもつことができます。

<x:sql>
実行する SQL ステートメントを指定します。
<x:parameter>
Call ステートメントの中のパラメーターに値とメタデータを指定します。 x:parameter タグと Call ステートメントの中のパラメーターとの間には 1 対 1 の対応が必要です。

以下のアクションは、名前が 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"/>

フィードバック