[英]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 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()
包装。 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.