0

OUTパラメータとしてOracle REF CURSORを持つOracleストアドプロシージャがあります。データが DB に存在する場合、1 つの選択ステートメントが実行され、REF CURSOR には、データ サービスの OUTPUT マッピングでアクセスできるマップされた選択ステートメントからの列が含まれます。ただし、ストアド プロシージャへの入力に対応するデータがない場合は、別の select ステートメントが実行されます。この 2 番目の SELECT ステートメントには、異なる列セットがあります。(要するに、2 つの select ステートメントのいずれかが、両方の select ステートメントで異なる列セットを持つストアド プロシージャへの入力に応じて実行されます)

データ サービスで DB 列を使用して出力マッピングを定義しているため、このシナリオでは、異なる列セットを持つ異なる選択ステートメントが実行されるため、データ サービスは、実行するたびに出力マッピングで定義されたすべての列を見つけることができません。ストアドプロシージャなので、次のエラーが発生します

<axis2ns19:DataServiceFault xmlns:axis2ns19="http://ws.wso2.org/dataservice">Error obtaining parser from data source:DS Fault Message: Error in 'SQLQuery.processStoredProcQuery'
DS Code: DATABASE_ERROR
Source Data Service:-
Name: GET_USER_DS
Location: /GET_USER_DS.dbs
Description: N/A
Default Namespace: http://ws.wso2.org/dataservice
Current Request Name: USER_op
Current Params: {in_user_id=111111111}
Nested Exception:-
DS Fault Message: Error in 'StaticOutputElement.execute', cannot find parameter with type:column name:DASHBOARDID
DS Code: INCOMPATIBLE_PARAMETERS_ERROR
"

出力マッピングの列が返された結果セットで使用できない場合でも、このエラーが発生しないように、Data サービスのオプションの出力マッピングを定義する方法はありますか?

私にお知らせください。ありがとうアビジット

4

1 に答える 1

0

DSS 3.0.0 以降のバージョンでは、値が不明な結果要素に対して optional="true" を設定できます。したがって、REF_CURSOR およびその他の選択ステートメントから返される要素の場合、データベースの結果要素定義で optional="true" を設定します。

<result element="element" rowName="elements" >
  <element name="DASHBOARDID" column="DASHBOARDID" xsdType="xs:string" optional="true"/>
</result>
于 2013-01-15T04:24:25.867 に答える