多行到Oracle中的一行

时间:2014-09-20 18:12:41

标签: sql oracle

unprovision_meta_data xmltype列

select h.unprovision_meta_data.extract('/').getStringVal() from test h;

输出:

<Warehouse whono="200">
  <Building>Leased</Building>
</Warehouse>

我想要像这样的一行:

<Warehouse whono="200"> <Building>Leased</Building> </Warehouse>

基本上我想将sql输出假脱机到一个平面文件。所以每行都在一行中 这有可能吗?

感谢。

2 个答案:

答案 0 :(得分:0)

select  regexp_replace(
     h.unprovision_meta_data.extract('/').getStringVal(), 
    '('||chr(10)||'|'||chr(13)||')+', 
    '') as unprovision_meta_data
from test h

输出:

<Warehouse whono="200">  <Building>Leased</Building></Warehouse>

答案 1 :(得分:0)

您可以将TRANSLATE用于此目的:

 select TRANSLATE(h.unprovision_meta_data.extract('/').getStringVal(),
                  '-' || chr(10) || chr(13),
                  '-')
 from test h;

TRANSLATE(..., '-' || chr(10) || chr(13), '-')部分将:

  • -映射到-(身份操作)
  • \r映射到 nothing
  • \n映射到 nothing

-技巧是因为当替换字符串为空时TRANSLATE的行为与您预期的不同(在这种情况下它会返回NULL)。