1

Oracleデータベースにストアドプロシージャがあります。このストアード・プロシージャーはCLOBタイプを返します。このCLOBタイプには、埋め込みxmlが含まれています。DBlookup Mediatorを使用して、次のようにこのストアドプロシージャを呼び出します。

<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.CLOBjavaタイプのtoStringメソッドを実行した結果だと思いますが、CLOBの内容を取得する必要があります。 toStringの結果。

誰かがCLOBタイプを返すストアドプロシージャを呼び出しましたか?

ありがとうございました。

4

2 に答える 2

2

はい、DBMediator (DBLookup/DBReport) は、そのままでは CLOB、BLOB などの高度なデータ型をサポートしていません。あなたが正しく指摘したように、返されたフィールドの値は、データ型を適切に処理せずに文字列にシリアル化しようとしているため (これがデフォルトの動作であるため)、前述の動作を観察しているのはそのためです。

すべての高度なデータ型/SQL ロジックを処理したい場合、データ操作操作に対して使用する機能の完全なスタックを提供する WSO2 DSS (またはデータサービス機能) を使用することをお勧めします。これにより、単純な SELECT から非常に厳密なストアド プロシージャまで、任意の SQL ロジックを簡単に呼び出すことができます。

于 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 に答える