xml - 如何使用 XMLTABLE 在 Oracle SQL 中导入复杂的 XML 类型

标签 xml oracle

我将以下 XML 文件从名为 ARCHIVDATA 的表中完全导入到一个名为 CLOB_CONTENT 的单元格中:

<AuditLog>
  <AuditLogEntry>
     <Header>1
     </Header>
     <Content>2
     </Content>
  </AuditLogEntry>
  <AuditLogEntry>
     <Header>3
     </Header>
  </AuditLogEntry>
  <AuditLogEntry>
     <Header>4
     </Header>
     <Content>5
     </Content>
     <Content>6
     </Content>
  </AuditLogEntry>
</AuditLog>

结果我想要的是下表(有两行的表):
页眉 |内容
1 | 2
3 |空
4 | 5
4 | 6

我该怎么做?

我已经尝试过以下方法:

SELECT x3.header, x4.content
FROM (select xmltype(xml.CLOB_CONTENT) xmldata from ARCHIVDATA) x1,
     xmltable('/AuditLog/AuditLogEntry'
         passing x1.xmldata
         columns
             header XmlType path 'header',
             content XmlType path 'content'
         )x2,
         xmltable('/header'
         passing x2.header
         columns
             header varchar2(4000) path '.'
         )x3,
         xmltable('/content'
         passing x2.content
         columns
             content varchar2(4000) path '.'
         )x4
;/

我必须更改什么才能获得所需的结果表?

最佳答案

我用下一个查询解决了这个任务。但我确信存在更简单的方法。

SELECT headers.header,
  contents.content
FROM
  (SELECT extracted."Header" AS header
  FROM ARCHIVDATA a,
    xmltable('/AuditLog/AuditLogEntry' passing xmltype(a.CLOB_CONTENT) columns "Header" VARCHAR2(6) PATH '/AuditLogEntry/Header') extracted
  ) headers
LEFT JOIN
  (SELECT sel.Header,
    sel2.content
  FROM
    (SELECT extracted."Header" AS header,
      extracted."Content"      AS content
    FROM ARCHIVDATA a,
      xmltable('/AuditLog/AuditLogEntry' passing xmltype(a.CLOB_CONTENT) columns "Header" VARCHAR2(6) PATH '/AuditLogEntry/Header', "Content" xmltype path '/AuditLogEntry') extracted
    ) sel,
    xmltable('/AuditLogEntry/Content' passing sel.content columns content VARCHAR2(6) path '/Content') sel2
  ) contents
ON headers.header = contents.header;

关于xml - 如何使用 XMLTABLE 在 Oracle SQL 中导入复杂的 XML 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382694/

相关文章:

android - Android xml 中的一侧有角度的矩形

java - XML 编码 + 项目结构

c# - 如何连接到远程 Oracle 数据库

oracle - 如何查看针对 Oracle 执行的查询?

xml - 使用逗号分隔的枚举列表的 XSD 架构

sql-server - 从 SQL Server 中的 xml 字段中选择日期列表

android - 调用后 TextView 边框颜色未设置为黄色

sql - 如何从 XMLType 节点中提取元素路径?

sql - SQL Developer 工作表中的多个插入

java - 无法使用 hibernate 从 oracle 表中选择数据