如何从 weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 获取字符串?

How to get String from weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB?

环境: Oracle 11g, Weblogic 9.2, Java 4, 驱动: oracle.jdbc.OracleDriver

上下文: 我想从数据库中提取一个 xml 值并在 Java 中使用结果,使用以下 select:

SELECT EXTRACT(XML_TEXT, 'PATH/TO/XML/VALUE/text()').getClobVal() AS VALUE 
FROM MYTBALE WHERE id =xxxx;

问题:在 SQL 开发人员中,我确实可以看到字符串检索正常,但在 Java:

代码: 使用 getClobVal():

...
HashMap <String, Object> element = (HashMap) iter.next();
String value = (unwrap & cast in some way ) element.get("VALUE");
...

我找不到从该对象获取字符串的方法,有什么想法吗?

编辑: 我无法禁用 Weblogic 包装。我正在考虑在数据库端做一些解决方法来代替 blob。

在您的 WebLogic 控制台中禁用数据类型的包装(在 Connection Pool -> Advanced 下,请参阅 here)。重新启动服务器,现在您将得到一个 oracle.sql.CLOB 对象而不是 weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 对象。

编辑:对于那个特定的method/class,你可以使用特定的供应商连接(getVendorConnection() method)应该return 展开的对象。

由于无法解包或转换对象,我最终在数据库中工作:

create or replace procedure MANAGE_DOCUMENT(
  pSomeParam IN someTable.someColumn%TYPE,#if we need some param.
  pError OUT VARCHAR2
  )IS
  vResult BLOB;
  vDoc CLOB;

  begin
    pError := '';

    #extract base64 document
    SELECT EXTRACT(myColumn, 'xPath/to/the/element/text()').getClobVal()
    into vDoc
    FROM myTable WHERE someCondition;

    #check if doc exists
    IF vDoc IS NULL THEN
      pError :='Document not found';
    ELSE
      #decode and get blob
      vResult := utl_raw.cast_to_raw(vDoc);
      #do inserts or whatever        
      END IF;
    END IF; 
end MANAGE_DOCUMENT;