2016-12-07 32 views
1
select a.test 
from demotable b 
    ,XMLTable('//test' passing xmltype(b.xmlTagColumn) columns test varchar(10) path '.') a 

b.xmlTagColumn包含xml内容。 如果b.xmlTagColumn具有<test></test>那么我没有从上面的任何声明甚至没有空。如何获得空标签的空值或虚拟值?如何使用Oracle在表中获取XML空标记的虚拟值?

+0

请为数据库+版本 –

回答

1

left join ... on 1=1


select a.test 

from    demotable b 

     left join XMLTable 
        (
         '//test' 
         passing xmltype(b.xmlTagColumn) 
         columns 
          test varchar(10) path '.' 
        ) a 

     on   1=1 
;   

演示

create table demotable (id int,xmlTagColumn varchar2(100)); 

insert into demotable (id,xmlTagColumn) values (1,'<X><test>123</test></X>'); 
insert into demotable (id,xmlTagColumn) values (2,'<Y><test>456</test></Y>'); 
insert into demotable (id,xmlTagColumn) values (3,'<Z><prod>123</prod></Z>'); 

select b.id 
     ,a.test 

from    demotable b 

     left join XMLTable 
        (
         '//test' 
         passing xmltype(b.xmlTagColumn) 
         columns 
          test varchar(10) path '.' 
        ) a 

     on   1=1 
;   

+----+--------+ 
| ID | TEST | 
+----+--------+ 
| 1 | 123 | 
+----+--------+ 
| 2 | 456 | 
+----+--------+ 
| 3 | (null) | 
+----+--------+ 
+0

添加一个标签,通过http://rextester.com/IJCW99069试图理解这一点,但在调用'XMLTYPE时获取ORA-06553:PLS-306:错误的参数或数量类型' –

+0

我会在几分钟内添加一个小演示 –

+0

@Used_By_Already,演示已准备就绪 –

相关问题