Oracle SQL:如何从分层表中获取xml

时间:2012-10-13 18:37:52

标签: sql xml oracle hierarchical

id  parent_id  Name         Text
0 ...........  body_text   

1 ..........0  text....... . something

2 ..........0  blank       

3 ..........2  text ........ something

4 ...........  info        

5 ..........4  text ........ something

谁知道如何从上一个分层表中获取以下xml格式:

<?xml version "................."?>
<body_text>
<text>something</text>
<blank>
    <text>something</text>
</blank>
</body_text>
<info>
 <text>some</text>
</info>

唯一知道如何做到这一点的部分是现在也不起作用:

select DBMS_XMLGEN.getXML(DBMS_XMLGEN.newcontextfromhierarchy('SELECT level,
XMLElement(evalname(Name), text))
from my_table t
START WITH id_parent is null
CONNECT BY PRIOR id = parent_id'))
 FROM dual

1 个答案:

答案 0 :(得分:1)

您提供的查询将为您提供您期望的结果。你只有几个语法错误。第一。 parent_idid_parent列名称在您的查询中具有不同的id位置。让他们一样。第二。从)

中删除最后一个括号XMLElement(evalname(Name), text))
SQL> set long 300

SQL> create table  t1 (id1,  parent_id,  Name1, Text) as(
  2  select 0, null, 'body_text', null        from dual union all
  3  select 1, 0,    'text',      'something' from dual union all
  4  select 2, 0,    'blank',     null        from dual union all
  5  select 3, 2,    'text' ,     'something' from dual union all
  6  select 4, null, 'info',      null        from dual union all
  7  select 5, 4,    'text',     'something'  from dual
  8  );

Table created

SQL> select DBMS_XMLGEN.getXML(DBMS_XMLGEN.newcontextfromhierarchy('SELECT level,
  2     XMLElement(evalname(Name1), text)
  3    from t1 t
  4    start with parent_id is null
  5    connect by prior id1 = parent_id')) xml
  6   from dual
  7  ;

xml
--------------------------------------------------------------------------------
<body_text>
  <text>something</text>
  <blank>
    <text>something</text>
  </blank>
</body_text>
<info>
  <text>something</text>
</info>

SQL>  select '<?xml version="1.0" ?>'
  2     || chr(10)
  3     || DBMS_XMLGEN.getXML(DBMS_XMLGEN.newcontextfromhierarchy('SELECT level,
  4            XMLElement(evalname(Name1), text)
  5          from t1 t
  6          start with parent_id is null
  7          connect by prior id1 = parent_id')) as xml
  8   FROM dual
  9  ;

XML
--------------------------------------------------------------------------------
<?xml version="1.0" ?>
<body_text>
  <text>something</text>
  <blank>
    <text>something</text>
  </blank>
</body_text>
<info>
  <text>something</text>
</info>