首页 > 解决方案 > PL/SQL:循环遍历 XML 列并从重复元素中提取值

问题描述

我有一个包含 XMLType 列的 SQL 表。我需要遍历每一行并从列中提取值。

XML 包含多个具有相同的子项,如下所示:

<parent>
  <child>Test</child>
  <child>Test1</child>
  <child>Test2</child>
</parent>

我的目标是从每个孩子那里获取价值并附加到一个字符串中。但是,我在提取价值时遇到问题。

我目前的解决方案:

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;

我的第一个问题是我似乎无法获得个人价值观。我已经使用了 EXTRACT 和 EXTRACTVALUE,但我得到的最好的是'TEST1TEST2 ...'。

其次,如果我尝试使用row.XML_COLUMN它会抱怨它不存在。

标签: xmloracleplsql

解决方案


尝试使用XMLTable像集合一样遍历值。

示例架构

--drop table table1;
create table table1 as
select xmltype('
    <parent>
        <child>Test</child>
        <child>Test1</child>
        <child>Test2</child>
    </parent>') xml_column
from dual;

PL/SQL 循环

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;
/

DBMS_OUTPUT 结果

Test
Test1
Test2

推荐阅读