我使用的是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
谁知道我做错了什么? 谢谢你帮助我
答案 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)
;
以下是一些文档:
答案 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)