PL / SQL: L oop Через XML столбец и извлечение значения из дубликатов элементов - PullRequest
1 голос
/ 21 февраля 2020

У меня есть таблица SQL, которая содержит столбец XMLType. Мне нужно перебрать каждую строку и извлечь значения из столбца.

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, он жалуется, что его не существует.

1 Ответ

2 голосов
/ 21 февраля 2020

Попробуйте использовать 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 L oop

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
...