0

我有 Oracle 存储过程,其中 Oracle REF CURSOR 作为 OUT 参数。当数据库中存在数据时,将执行一个 select 语句,并且 REF CURSOR 将映射 select 语句中的列,这些列可以在数据服务的 OUTPUT 映射中访问。但是,当没有数据用于存储过程的相应输入时,将执行不同的选择语句。第二个 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
"

有没有办法为数据服务定义可选的输出映射,这样即使输出映射中的列在返回的结果集中不可用,我也不会收到此错误?

请告诉我。谢谢阿比吉特

4

1 回答 1

0

使用DSS 3.0.0 及更高版本,您可以为值不确定的结果元素设置 optional="true"。因此,对于从 REF_CURSOR 和其他选择语句返回的元素,请在 dbs 的结果元素定义中设置 optional="true" 。

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