【发布时间】: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。
我想既然可以提取列值,属性名称肯定也可以,但我就是想不通。
提前致谢, 蒂姆
【问题讨论】: