gpt4 book ai didi

sql - XMLTABLE 提取元素的位置()

转载 作者:行者123 更新时间:2023-12-02 03:10:31 26 4
gpt4 key购买 nike

我有这样的 XML:

<all>
<cell>
<data>A</data>
<data>A1</data>
<data>A2</data>
<data>A3</data>
</cell>
<cell>
<data>B</data>
<data>C</data>
<data>D</data>
<data>E</data>
</cell>
<cell>
<data>X</data>
<data>X</data>
<data>X</data>
<data>X</data>
</cell>
</all>

我想在表内容中提取每个所有/单元格/数据以及元素的唯一路径。属性中没有 ID 或其他唯一标记,我对唯一路径的想法是:

/all/cell[2]/data[5]

预期结果(示例 XML)是:

Content | Path
----------------------
A |/all/cell[1]/data[1]
A1 |/all/cell[1]/data[2]
A2 |/all/cell[1]/data[3]
A3 |/all/cell[1]/data[4]
B |/all/cell[2]/data[1]
C |/all/cell[2]/data[2]
D |/all/cell[2]/data[3]
E |/all/cell[2]/data[4]
X |/all/cell[3]/data[1]
X |/all/cell[3]/data[2]
X |/all/cell[3]/data[3]
X |/all/cell[3]/data[4]

我尝试使用 XMLTABLE 调用元素的 position(),但它对每个元素仅返回“1”。

select b.*
from dropme a,
xmltable('/all/cell/data' passing
xmltype(xml_text) columns
cmp_old varchar2(200) path 'text()', -- work corect!
cmp_old1 varchar2(200) path '.', -- work corect! Result is same as cmp_old(upper filed)
rowcnt number path 'position()', -- return only value "1"
rowname varchar2(200) path 'name()', -- work corect! Return "data" as result
parent_rowcnt number path '../position()', -- return only value "1"
parent_rowname varchar2(200) path '../name()' -- work corect! Return "cell" as result
) b;

我不明白为什么它适用于函数name()text(),但position()有问题。

我尝试寻找 position() 的问题或其他解决方案来提取所有元素的路径和内容。

最佳答案

使用多个相关的 XMLTABLEFOR ORDINALITY 而不是 position():

select b.cell_no,
b.cell_name,
c.*
from dropme a
CROSS JOIN
xmltable(
'/all/cell'
passing xmltype(xml_text)
columns
cell_no FOR ORDINALITY,
cell_name VARCHAR2(200) PATH 'name()',
cell XMLType PATH '.'
) b
CROSS JOIN
XMLTABLE(
'/cell/data'
PASSING b.cell
COLUMNS
cmp_old varchar2(200) path 'text()',
rowcnt FOR ORDINALITY,
rowname varchar2(200) path 'name()'
) c;
CELL_NO | CELL_NAME | CMP_OLD | ROWCNT | ROWNAME------: | :-------- | :------ | -----: | :------      1 | cell      | A       |      1 | data         1 | cell      | A1      |      2 | data         1 | cell      | A2      |      3 | data         1 | cell      | A3      |      4 | data         2 | cell      | B       |      1 | data         2 | cell      | C       |      2 | data         2 | cell      | D       |      3 | data         2 | cell      | E       |      4 | data         3 | cell      | X       |      1 | data         3 | cell      | X       |      2 | data         3 | cell      | X       |      3 | data         3 | cell      | X       |      4 | data   

db<> fiddle here

关于sql - XMLTABLE 提取元素的位置(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753958/

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