PL/SQL:循环遍历XML列并从重复的元素中提取值
我有一个包含XMLType列的SQL表。我需要遍历每一行并从列中提取值 XML包含多个子项,且子项相同,如下所示:PL/SQL:循环遍历XML列并从重复的元素中提取值,xml,oracle,plsql,Xml,Oracle,Plsql,我有一个包含XMLType列的SQL表。我需要遍历每一行并从列中提取值 XML包含多个子项,且子项相同,如下所示: <parent> <child>Test</child> <child>Test1</child> <child>Test2</child> </parent> 我的第一个问题是,我似乎无法获得个人价值观。我使用了EXTRACT和EXTRACTVALUE,但我得到的最好结果
<parent>
<child>Test</child>
<child>Test1</child>
<child>Test2</child>
</parent>
我的第一个问题是,我似乎无法获得个人价值观。我使用了EXTRACT和EXTRACTVALUE,但我得到的最好结果是“TEST1TEST2…”
其次,如果我尝试使用row.XML\u COLUMN
它会抱怨它不存在。尝试使用to
像一个集合一样遍历这些值
示例模式
DBMS_输出结果
这是可行的,但是你能解释一下“交叉连接”部分吗?我不明白这是怎么回事。@ghost013交叉连接很奇怪。它实际上更像是一个外部应用,这也是一个奇怪的概念。表1中的每一行都被传递到XMLTABLE中,并将结果相乘,这样就可以将一个XML值/行扩展到多个关系行。
DECLARE
sample VARCHAR(2000);
BEGIN
FOR row IN (SELECT xml_column FROM table)
LOOP
FOR child in (SELECT EXTRACT('/parent/child') ...
LOOP
....
END LOOP;
END LOOP;
END;
--drop table table1;
create table table1 as
select xmltype('
<parent>
<child>Test</child>
<child>Test1</child>
<child>Test2</child>
</parent>') xml_column
from dual;
begin
for children in
(
select child
from table1
cross join xmltable
(
'/parent/child'
passing xml_column
columns child varchar2(100) path '/'
)
) loop
dbms_output.put_line(children.child);
end loop;
end;
/
Test
Test1
Test2