PLSQL XML в таблицу по тегу и значению - PullRequest
0 голосов
/ 04 мая 2018

Можно ли в 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

Мне удалось получить конкретные значения, объявив COLUMNS и PATH в запросе XMLTABLE путем жесткого кодирования error, но я хотел бы сделать это динамически, поскольку теги в responseObject могут различаться. Я пытаюсь поместить все это в ассоциативный массив.

1 Ответ

0 голосов
/ 04 мая 2018

Я думаю, вы можете захотеть что-то вроде этого (работает в 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

...