2013-09-23 38 views
1

我有一个甲骨文程序与CLOB响应WSO2 DSS呼叫流程提高ORA-22835错误

TEST_XML_PARM_CALLER 

呼叫流程

TEST_XML_PARM_CALLEE(parm1 IN CLOB, parm2 OUT CLOB) 

通过WSO2 ESB,WSO2 DSS。

parm1是CLOB参数,从过程TEST_XML_PARM_CALLER, 发送XML内容,而parm2是从过程TEST_XML_PARM_CALLEE返回XML内容的CLOB参数。

从TEST_XML_PARM_CALLER到ESB调用到DSS到TEST_XML_PARAM_CALLEE是CLOB内容(字符串长度超过4000伟大的), 正确的,但返回的参数(parm2)会引发错误时长比4000大,像波纹管

ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 6024, maximum: 4000) 

在WSO2 DSS,配置如下

<data name="test_xml_parm"> 
    <config id="test_db"> 
     <property name="carbon_datasource_name">test_db</property> 
    </config> 
    <query id="qry_test_xml_parm" useConfig="test_db"> 
     <sql>call TEST_XML_PARM_CALLEE(?,?)</sql> 
     <result element="rcd" rowName="row"> 
     <element column="rtn_clob" name="rtn_clob" xsdType="string"/> 
     </result> 
     <param name="clob_xml" ordinal="1" sqlType="STRING"/> 
     <param name="rtn_clob" ordinal="2" sqlType="STRING" type="OUT"/> 
    </query> 
    <operation name="op_test_xml_parm"> 
     <call-query href="qry_test_xml_parm"> 
     <with-param name="clob_xml" query-param="clob_xml"/> 
     </call-query> 
    </operation> 
</data> 

谁能告诉我如何解决它?

+0

这是由于LOB大小大于缓冲区限制。请参阅http://www.dba-oracle.com/t_ora_22835_buffer_too_s mall.htm – Chanikag

+0

感谢您的回复。 但是过程“TEST_XML_PARM_CALLEE”的输入参数(parm1),它的长度大于4000,不会引发错误。 只有返回参数将限制在4000的长度。 –

+0

通过引用URL:[链接](http://dinushasblog.blogspot.tw/2011/08/how-to-call-oracle-stored-function-from。 ), 替换'调用TEST_XML_PARM_CALLEE(?,?)'为' {调用TEST_XML_PARM_CALLEE(?,?)}' –

回答

0

这是一个老问题,我不知道wso2Dss版本。

我也有类似的问题,wso2DSS 4.4.2

1)设置参数则sqlType为 “CLOB” 2)与ojdbc6.jar替换ojdbc5.jar(或者你会得到java.lang.AbstractMethodError:的setClob是抽象的错误。

我仍然有能力用xml的问题(我必须把输入CDATA和响应ecaped(< =>&lt;),但我应该能够处理它在ESB上侧。