WSO2 DataService:如何处理返回“未找到数据”的oracle refcursor?

时间:2013-01-11 05:51:54

标签: wso2 wso2esb wso2dss

我在Mac OSX 10.7.8上使用WSO2 4.0.3。我启用了数据服务服务器功能(3.2.2)

使用带有oracle ref游标的存储过程作为out参数处理数据服务(.dbs文件)。如果存储过程返回数据,则写入的数据服务工作正常,但是当存储过程“找不到数据”时,返回的游标为空,因此不返回该元素,因此出现以下错误。

有人可以提供一些见解,了解如何在WSO2数据服务中的refcursor上处理这个特定场景吗?

“[2013-01-11 10:49:02,902]错误 - SQLQuery DS错误消息:'StaticOutputElement.execute'中出错,找不到类型为:column name:class的参数 DS代码:INCOMPATIBLE_PARAMETERS_ERROR

DS错误消息:'StaticOutputElement.execute'出错,找不到类型为的参数:列名:class DS代码:INCOMPATIBLE_PARAMETERS_ERROR

at org.wso2.carbon.dataservices.core.engine.StaticOutputElement.getParamValue(StaticOutputElement.java:201)
at org.wso2.carbon.dataservices.core.engine.StaticOutputElement.execute(StaticOutputElement.java:239)
at org.wso2.carbon.dataservices.core.engine.OutputElementGroup.execute(OutputElementGroup.java:115)
at org.wso2.carbon.dataservices.core.description.query.Query.writeResultEntry(Query.java:335)
at org.wso2.carbon.dataservices.core.description.query.SQLQuery.processStoredProcQuery(SQLQuery.java:908)
at org.wso2.carbon.dataservices.core.description.query.SQLQuery.runQuery(SQLQuery.java:2044)

这是我写的.dbs文件

<data  name="dsname">
<config id="datas">
  <property name="carbon_datasource_name">datas</property>
</config>
<query id="procedure_YEAR" useConfig="datas">
  <sql>{callProcdure (?,?,?,?)}</sql>

  <result element="array" rowName="dict" >
  <element name="status" column="out_status" xsdType="xs:string" />
   <element name="error_desc" column="out_error_desc" xsdType="xs:string" />
    <element name="class" column="class" xsdType="xs:string" />
    <element name="org" column="org" xsdType="xs:string" />
    <element name="year" column="year" xsdType="xs:number" />
    <element name="week_yr" column="week_yr" xsdType="xs:number" />
  </result>
  <param name="in_year1" sqlType="INTEGER" type="IN"  />
  <param name="out_status" sqlType="STRING" type="OUT"  />
  <param name="out_error_desc" sqlType="STRING" type="OUT" />
  <param name="result" sqlType="ORACLE_REF_CURSOR" type="INOUT" />
<!--  <param name="class" sqlType="STRING" type="INOUT" />
  <param name="org" sqlType="STRING" type="INOUT"  />
  <param name="year" sqlType="INTEGER" type="INOUT"  />
  <param name="week_yr" sqlType="INTEGER" type="INOUT"  />
  <param name="bill_amount" sqlType="INTEGER" type="INOUT"  />
  <param name="bill_unit" sqlType="INTEGER" type="INOUT"  />
  <param name="yoy" sqlType="INTEGER" type="INOUT"  />-->

 </query>
 <operation name="YEAR_op">
  <call-query href="procedure_YEAR">
     <with-param name="in_year1" query-param="in_year1" />
   </call-query>
 </operation>
</data>

2 个答案:

答案 0 :(得分:1)

使用DSS 3.0.0及更高版本,您可以为值不确定的结果元素设置optional =“true”。因此,对于从REF_CURSOR返回的元素,在dbs的结果元素定义中设置optional =“true”。

例如:

<result element="array" rowName="dict" >
  <element name="status" column="out_status" xsdType="xs:string" />
   <element name="error_desc" column="out_error_desc" xsdType="xs:string" />
    <element name="class" column="class" xsdType="xs:string" optional="true"/>
    <element name="org" column="org" xsdType="xs:string" />
    <element name="year" column="year" xsdType="xs:number" />
    <element name="week_yr" column="week_yr" xsdType="xs:number" />
  </result>

答案 1 :(得分:0)

也许拼写? callProcdure = callProcedure