Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL/SQL:循环遍历XML列并从重复的元素中提取值_Xml_Oracle_Plsql - Fatal编程技术网

PL/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,但我得到的最好结果

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

XML包含多个子项,且子项相同,如下所示:

<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