gpt4 book ai didi

xml - 如何在 Oracle 中对以下 XML 使用 XMLTable

转载 作者:行者123 更新时间:2023-12-04 16:56:01 25 4
gpt4 key购买 nike

我在 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/命名空间不太熟悉。

谢谢。

最佳答案

我不知道为什么你什么也没看到;我看到了错误的东西,但这可能取决于我想的 Oracle 版本,或者您的真实 XML 和代码的差异。默认命名空间混淆了这个问题,不应该存在;并且 GGGGG 的路径不需要前导斜杠:

with ppp (someCLOB_column) as (
select '<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>...</PPPPP>
</ns:ABCDE>' from dual
)
select x.g1
from ppp p
cross join 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
/

G1
--------------------------------
G1_valG2_valG3_val

不过,您可能想要单个值:
select x.g1, x.g2, x.g3, x.ppppp
from ppp p
cross join 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(8) PATH 'GGGGG/G1',
G2 varchar(8) PATH 'GGGGG/G2',
G3 varchar(8) PATH 'GGGGG/G3',
PPPPP varchar2(8) PATH 'PPPPP'
) x
/

G1 G2 G3 PPPPP
-------- -------- -------- --------
G1_val G2_val G3_val ...

关于xml - 如何在 Oracle 中对以下 XML 使用 XMLTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35199404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com