1

我在 Oracle 数据库中有一个存储过程。此存储过程返回一个 CLOB 类型。此 CLOB 类型包含嵌入的 xml。我使用 DBlookup 调解器来调用这个存储过程,如下所示:

<dblookup>
<connection>
<pool>
<dsName>XeDS</dsName>
</pool>
</connection>
<statement>
 <sql>select  pkg_ws_sol_cursos.fu_listado_cursos(?,?) as resultado from dual</sql>
 <parameter xmlns:xs="http://www.example.es" expression="//xs:HASH" type="VARCHAR" />
 <parameter xmlns:xs="http://www.example.es" expression="//xs:PV2_I_LANGISO" type="VARCHAR" />
 <result name="resultado_p" column="resultado" />
</statement>
</dblookup>

当我使用存储过程返回的值获取属性“resultado_p”的值时,我意识到这个值是不正确的。返回值应该是包含嵌入 xml 的字符串,但不是这样。返回值是这样的字符串: oracle.sql.CLOB@423435435435 我认为这是执行 oracle.sql.CLOB java 类型的 toString 方法的结果,但我需要获取 CLOB 的内容而不是toString 结果。

是否有人调用了返回 CLOB 类型的存储过程?

谢谢你。

4

2 回答 2

2

是的,DBMediators (DBLookup/DBReport) 不支持开箱即用的高级数据类型,例如 CLOB、BLOB 等。正如您正确指出的那样,正在尝试将返回字段的值序列化为字符串(因为这是默认行为)而不正确处理数据类型,这就是您观察上述行为的原因。

如果您想处理所有高级数据类型/SQL 逻辑,我们通常建议使用 WSO2 DSS(或数据服务功能),它为您提供了用于处理数据操作操作的完整功能堆栈。有了它,您可以轻松调用任何 SQL 逻辑,从简单的 SELECT 到非常严格的存储过程。

于 2013-01-01T16:11:37.333 回答
0

尝试使用: SELECT sys_XMLGEN( pkg_ws_sol_cursos.fu_listado_cursos(?,?) , XMLFormat('Result')).getClobVal() as resultado from dual

于 2017-06-15T00:05:52.377 回答