首页 > 解决方案 > PLSQL XML 按标签和值放入表中

问题描述

在 PL/SQL 中,是否可以将 XML 转换为按标签和值拆分的表,而无需对任何列进行硬编码?

示例 XML:

<responseObject>
    <error>That is not a valid request</error>
    <errorCode>A11</errorCode>
    <value>A</value>
</responseObject>

示例输出:

Tag                        Value
------------------------------------------------------
error                      That is not a valid request
errorCode                  A11
value                      A

我设法通过在查询中通过硬编码声明COLUMNSand来获取特定值,但我想动态地执行此操作,因为 中的标签可能会有所不同。我试图将所有这些放入一个关联数组中。PATHXMLTABLEerrorresponseObject

标签: xmlplsqlxmltable

解决方案


我想你可能想要这样的东西(在 Oracle 11g 中工作):

DECLARE
  lxml xmltype;
begin
  lxml := 
  xmltype('<responseObject>
             <error>That is not a valid request</error>
             <errorCode>A11</errorCode>
             <value>A</value>
           </responseObject>');

  FOR test IN (
    select tag,
           VALUE
    FROM   xmltable('responseObject/*'
             passing lxml
             columns
               tag VARCHAR2(128) path 'name()',
               VALUE VARCHAR2(128) path '.'
           ) t
  )
  LOOP
    dbms_output.put_line(test.tag || ' - ' || test.value);
  END LOOP;
end;

我基本上适应了这里提供的答案:https ://stackoverflow.com/a/38225058/1271743

并使用 name() 函数来检索 XML 节点的名称


推荐阅读