【问题标题】:Oracle XMLSequence attribute name and valueOracle XMLSequence 属性名称和值
【发布时间】:2013-06-07 17:45:35
【问题描述】:

我正在为我们的 Oracle 系统使用基于 XML 的审计。每个表上都有适当的触发器来创建记录的 XML 表示,该记录被插入或更新到我们数据库中的单个审计表中。审计数据的捕获工作正常,但是我在使用 Oracle 的 XML 解析实用程序提取信息时遇到问题。

以我们的 Gender 表为例,审计表有一个 XML 列,如下所示:

<?xml version = '1.0'?>
<ROWSET>
   <ROW num="1">
     <GENDER_ID>2</GENDER_ID>
     <GENDER>Male</GENDER>
     <GENDER_CODE>M</GENDER_CODE>
     <LAST_MODIFIED_BY_USER>bob.smith</LAST_MODIFIED_BY_USER>
     <LAST_MODIFIED_BY_DATE>08-JUN-13</LAST_MODIFIED_BY_DATE>
   </ROW>
</ROWSET>

我希望能够将 XML 解析为两种格式之一。

  • ROW 元素中的每个属性名称都是一列,每个属性值都是该列下方的值,或者
  • 每个属性名称和值组合都在自己的行中

使用以下脚本,我可以提取每个属性的值:

select extractValue(n.column_value, '/*') as Value
from (
      select extract(XMLType(at.xml), '//ROWSET/ROW') as data from audit_table at
      where at.audit_id = 1
     ) x, 
TABLE (xmlSequence(extract(x.data,'/ROW/*'))) n

这会产生 5 行和一个“值”列:

  • 2
  • M
  • 鲍勃.史密斯
  • 08-JUN-13

值本身几乎没有用,我不知道如何让属性名称与值相关联。有没有办法让属性名称(即 GENDER_ID 或 GENDER_CODE)出现在关联列中?

如果您知道 XML 的元素是什么,就有大量解析 XML 的示例。在我们的例子中,审计表将保存 Gender 的 XML(有 5 列)和具有广泛列名称和编号的其他表的 XML。

我想既然可以提取列值,属性名称肯定也可以,但我就是想不通。

提前致谢, 蒂姆

【问题讨论】:

    标签: xml oracle


    【解决方案1】:

    您可以使用getrootelement() 函数来获取属性名称。一个例子,

    SELECT EXTRACTVALUE (n.COLUMN_VALUE, '/*') AS NODE_VALUE,
           n.COLUMN_VALUE.getrootelement () AS NODE_NAME
      FROM (SELECT EXTRACT (
                      XMLType (
                         '<?xml version = ''1.0''?>
    <ROWSET>
       <ROW num="1">
         <GENDER_ID>2</GENDER_ID>
         <GENDER>Male</GENDER>
         <GENDER_CODE>M</GENDER_CODE>
         <LAST_MODIFIED_BY_USER>bob.smith</LAST_MODIFIED_BY_USER>
         <LAST_MODIFIED_BY_DATE>08-JUN-13</LAST_MODIFIED_BY_DATE>
       </ROW>
    </ROWSET>'),
                      '//ROWSET/ROW')
                      AS data
              FROM DUAL) x,
           TABLE (XMLSEQUENCE (EXTRACT (x.data, '/ROW/*'))) n
    

    输出:

    NODE_VALUE    NODE_NAME
    -----------------------------------
    2             GENDER_ID
    Male          GENDER
    M             GENDER_CODE
    bob.smith     LAST_MODIFIED_BY_USER
    08-JUN-13     LAST_MODIFIED_BY_DATE
    

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 2016-11-08
      • 1970-01-01
      • 2014-07-21
      • 2023-03-21
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多