【发布时间】:2017-08-17 22:23:55
【问题描述】:
我知道这里有很多关于在 Oracle SQL 中查询 XML 对象的条目。但是,我仍然找不到任何关于我的问题的答案。
我有一个 SQL 表 obj,其中包含一些列。 XML 格式的 clob 对象(列称为definition)。
我想从 clob 中提取一个具体的值。
XML 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<m>
<i n="Status">0</i>
<s n="Description">AmountDifference</s>
<s n="Name">InputvsOutput</s>
<a n="Variables">
<m>
<s n="Name">Formula</s>
<s n="Value">B-A</s>
</m>
<m>
<s n="Name">CriticalDiff</s>
<s n="Value">abs({B} - {A}) < 10</s>
</m>
</a>
</m>
SQL 查询应返回两个值:Description 和 Value,其中 Name = CriticalDiff。
SQL查询部分如下所示:
CAST(
CASE WHEN obj.definition is not null then
UTL_I18N.UNESCAPE_REFERENCE(
XMLTYPE(obj.definition).
EXTRACT('//s[@n="Description"]/text()')
.getStringVal() )
END as varchar(200)) as "Rule Expression"
, obj.definition as rule_xml
CAST 块工作正常,但我想知道如何以类似的方式转换最后一个命令,以便通过其名称 (= CriticalDiff) 获得一个值。
我面临的困难是有两个相似的元素(m)具有相同的属性名称(名称,值)。
任何想法如何从“CriticalDiff”中获得“价值”属性?
提前致谢!
【问题讨论】:
标签: sql xml oracle xpath xmltype