【发布时间】:2016-02-04 20:06:29
【问题描述】:
我在 Oracle 的一列中有 XML,存储为 CLOB 类型。我的目的是解析这个 XML 并检索与感兴趣的列相对应的数据。这是 XML 结构:
<ns:ABCDE xmlns:ns="http://www.something.com/something" xmlns:mno="http://www.somethingelse.com/05"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ns:ABCDE">
<GGGGG>
<G1>G1_val</G1>
<G2>G2_val</G2>
<G3>G3_val</G3>
</GGGGG>
<PPPPP>
...
</PPPP>
</ns:ABCDE>
这是我的 SQL 代码:
select x.*,p.*
from ppp p ,xmltable(
xmlnamespaces(default 'ABCDE',
'http://www.something.com/something' as "ns",
'http://www.somethingelse.com/05' as "mno",
'http://www.w3.org/2001/XMLSchema-instance' as "xsi",
'ns:ABCDE' as "type"
),
'/ns:ABCDE'
PASSING xmltype(p.someCLOB_column)
COLUMNS G1 varchar(32) PATH '/GGGGG'
) x
但是,运行 SQL 后,它没有显示任何错误,但也没有获取任何记录。我希望得到“G1_val”作为此查询的结果。
代码哪里出错了?我对 xml/命名空间不太熟悉。
谢谢。
【问题讨论】:
-
您的 XPath 有
ns:ABCCDE而不是ns:ABCDE但这可能是造成问题的拼写错误。它在 xmlnamespaces 子句中也有一个尾随逗号。为什么您只期望G1_val而不是GGGGG下的所有三个节点?如果我使用您的示例运行该查询,我会得到G1_valG2_valG3_val和...。 -
@AlexPoole - 谢谢。那些是错别字。我已经纠正了他们。正如你所说,是的,我应该得到 G1_valG2_valG3_val,我弄错了。但在我的情况下,我在运行查询时没有得到任何记录——甚至是不正确的数据。
标签: xml oracle oracle11g namespaces xmltable