Oracle从clob提取XML数据失败

Oracle从clob提取XML数据失败,xml,oracle,clob,Xml,Oracle,Clob,我使用的是oracle 11.2.0.4.0版 我有一个带有CLOB列、columnname消息的FINMESSAGES表 我想从MESSAGE列中提取一个xml元素,我这样做了 使用以下代码 (根据本文中的解决方案) 但我得到了以下错误: ORA-00932: inconsistent datatypes: expected - got CLOB 00932. 00000 - "inconsistent datatypes: expected %s got %s" *Cause: *

我使用的是oracle 11.2.0.4.0版 我有一个带有CLOB列、columnname消息的FINMESSAGES表 我想从MESSAGE列中提取一个xml元素,我这样做了 使用以下代码 (根据本文中的解决方案)

但我得到了以下错误:

ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:
Error at Line: 818 Column: 12
谁知道我做错了什么? 谢谢你帮助我

试试这个:

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)

您需要首先使用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)
;
createtablexmltest
(a编号,b clob);
插入xmltest值(1,“asd”);
插入xmltest值(2,“asd”);
犯罪
从xmltest中选择XMLTYPE.createxml(b);
挑选
十,*
从…起
xmltest调频
左联接XMLTable(
“/masterData”
传递XMLTYPE.createxml(fm.b)
柱
最新版本varchar2(6)路径“版本”
)x on(1=1)
;
以下是一些文档:

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)
;