Как использовать group by в xmltable oracle

Когда я использую group by в таблице XML, он выдает ошибку:

ORA-01422: exact fetch returns more than one requested number of rows

Я попробовал использовать функцию LISTAGG () в качестве решения, но это не помогло.

Мой SQL

   SELECT xmlelement("logs", xmlagg(xmlelement("log", xmlforest(v1.column_1 as "id", v1.column_2 as "name")))).getclobval()
   INTO   v_output 
   FROM   xmltable( '/logs/log' passing xmltype(in_xml) columns id number path 
  'id' ) x 
 JOIN   view v1 
 ON     v1.id= x.id;

Введите xml

declare
  in_xml clob := '<?xml version = "1.0" encoding = "UTF-8"?>
    <logs>
        <log>
            <id>123456</id>
        </log>
        <log>
            <id>456898</id>
        </log>
    </logs>';
  v_output clob;

begin

   select xmlelement("logs", xmlagg(xmlelement("log", xmlforest(v1.column_1 as "id", v1.column_2 as "name")))).getclobval()
  into v_output
  from xmltable(
    '/logs/log'
    passing xmltype(in_xml)
    columns id number path 'id'
  ) x
  join view v1 on v1.id = x.id
 GROUP BY  v1.id;

  dbms_output.put_line (v_output);

end;

Любое решение приветствуется.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
450
1

Ответы 1

Ваш первый запрос в порядке, как это было изначально написано, однако во втором блоке кода вы ввели предложение group by, которое может заставить ваш запрос возвращать несколько записей, но вы пытаетесь выбрать их в одну выходную переменную.

Вам нужно либо ограничить свой запрос одним идентификатором, либо изменить v_output на коллекцию значений clob и использовать массовые операции:

declare
  in_xml clob := '<?xml version = "1.0" encoding = "UTF-8"?>
    <logs>
        <log>
            <id>123456</id>
        </log>
        <log>
            <id>456898</id>
        </log>
    </logs>';
  type t_clob is table of clob;
  v_output t_clob;

begin

   select xmlelement("logs", xmlagg(xmlelement("log", xmlforest(v1.column_1 as "id", v1.column_2 as "name")))).getclobval()
  bulk collect into v_output
  from xmltable(
    '/logs/log'
    passing xmltype(in_xml)
    columns id number path 'id'
  ) x
  join view v1 on v1.id = x.id
 GROUP BY  v1.id
 fetch first 10 rows only;

 for iter in v_output.first .. v_output.last loop
   dbms_output.put_line (v_output);
 end loop;   
end;

Следует проявлять осторожность с приведенным выше кодом, поскольку он может, без ограничения выборки, потенциально исчерпать доступную память, если в v_output выбрано большое количество строк. В настоящее время будут извлечены и записаны только первые 10 записей.

HI Senetial все еще находится в выходной дублирующей записи.

afeef 02.01.2019 11:28

Другие вопросы по теме