Oracle从clob中提取XML数据失败

时间:2015-08-27 09:50:54

标签: xml oracle clob

我使用的是oracle版本11.2.0.4.0 我有一个带有CLOB列的表FINMESSAGES,列名为MESSAGE 我想从MESSAGE列中提取一个xml元素,然后我就这样做了 使用以下代码 (根据此link中的解决方案)

SELECT
   x.*

FROM

   FINMESSAGES FM
   left join XMLTable(
   '/masterData'
   passing FM.MESSAGE
   columns
   latestversion varchar2(6) path 'version'
   )  x on (1=1)
;

但我收到以下错误:

ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:
Error at Line: 818 Column: 12

谁知道我做错了什么? 谢谢你帮助我

2 个答案:

答案 0 :(得分:1)

您需要首先使用XMLTYPE.createxml()函数将CLOB值转换为XMLType。 将传递FM.MESSAGE 替换为传递XMLTYPE.createxml(FM.MESSAGE)

这是我的测试用例:

create table xmltest 
( a number, b clob );

insert into xmltest values ( 1, '<masterData>asd</masterData>' );
insert into xmltest values ( 2, '<masterData><version>asd</version></masterData>' );
commit;

select XMLTYPE.createxml( b ) from xmltest;

SELECT
   x.*
FROM
   xmltest FM
   left join XMLTable(
   '/masterData'
   passing XMLTYPE.createxml( fm.b )
   columns
   latestversion varchar2(6) path 'version'
   )  x on (1=1)
;

以下是一些文档:

XMLTABLE

XMLTYPE

答案 1 :(得分:0)

试试这个:

SELECT
   x.*    
FROM

   FINMESSAGES FM
   left join XMLTable(
   '/masterData'
   passing XMLPARSE(CONTENT FM.MESSAGE WELLFORMED)
   columns
   latestversion varchar2(6) path 'version'
   )  x on (1=1)
;

XMLPARSE(DOCUMENT FM.MESSAGE WELLFORMED)