尝试循环遍历 XML 以提取 PLSQL 中的值

2023-12-28

我正在尝试循环遍历 XML 并提取 UUID。我有以下内容,它循环正确的次数并每次打印一个空白行。为什么它不提取 UUID 节点的文本值?

   DECLARE
       X XMLTYPE := XMLTYPE('<?xml version="1.0" ?> 
         <StatusUp>
           <G_UUIDs>
               <UUID>1 test 1</UUID>
               <UUID>2 test 2</UUID>
               <UUID>3 test 3 </UUID>
               <UUID>4 test 4 </UUID>
           </G_UUIDs>
        </StatusUp>');
    BEGIN
       FOR r IN (SELECT EXTRACTVALUE(VALUE(p), 'StatusUp/G_UUIDs/UUID/text()') AS uuid

                   FROM TABLE(XMLSEQUENCE(EXTRACT(X, '//StatusUp/G_UUIDs/UUID'))) p)
       LOOP
          DBMS_OUTPUT.PUT_LINE('UUID' || r.uuid);
       END LOOP;
    END;

您已经在 FROM 语句中从 XML 中提取了 UUID,在 select 中,打个比方,您现在只有四行

<UUID> n test n </UUID>

因此,提取该数据的正确方法是:

DECLARE
  X XMLTYPE := XMLTYPE(
    '<?xml version="1.0" ?> 
    <StatusUp>
      <G_UUIDs>
        <UUID>1 test 1</UUID>
        <UUID>2 test 2</UUID>
        <UUID>3 test 3 </UUID>
        <UUID>4 test 4 </UUID>
      </G_UUIDs>
    </StatusUp>');
BEGIN
  FOR r IN (SELECT
              EXTRACTVALUE(
                VALUE(p),
                --'StatusUp/G_UUIDs/UUID/text()') AS uuid
                '/UUID/text()') AS uuid
            FROM
              TABLE(
                XMLSEQUENCE(
                  EXTRACT(
                    X,
                    '//StatusUp/G_UUIDs/UUID')
                )
              ) p
           )
  LOOP
    DBMS_OUTPUT.PUT_LINE(r.uuid);
  END LOOP;
END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试循环遍历 XML 以提取 PLSQL 中的值 的相关文章

随机推荐