环境:Oracle 11g,Weblogic 9.2,Java 4,驱动程序:oracle.jdbc.OracleDriver
上下文:我想从数据库中提取xml值并使用以下select中的结果处理Java:
SELECT EXTRACT(XML_TEXT, 'PATH/TO/XML/VALUE/text()').getClobVal() AS VALUE
FROM MYTBALE WHERE id =xxxx;
问题:在SQL Developer中,我确实可以看到检索到的字符串很好,但在Java中:
getClobVal()
函数,Weblogic将返回一个weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB
类型的包装对象,我无法进行转换或解包。getClobVal()
返回oracle.sql.Opaque
,我也无法投入任何东西。代码:使用getClobVal()
:
...
HashMap <String, Object> element = (HashMap) iter.next();
String value = (unwrap & cast in some way ) element.get("VALUE");
...
我找不到从该对象获取字符串的方法,任何想法?
编辑:我无法禁用Weblogic包装。我正在考虑在数据库方面做一些解决方法来获得blob。
由于我无法打开或转换对象,我最终在数据库中自行工作:
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;