2013-09-23 37 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上側。