listagg - это функция, представленная в Oracle 11.2!теперь эта функция дает нам много ошибок, мы мигрируем с MySQL на Oracle, и у нас есть такой запрос:
SELECT
p_id,
MAX(registered) AS registered,
listagg(MESSAGE, ' ') within GROUP (ORDER BY registered) AS MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;
отлично работает в MySQL, поскольку мы знаем, что с ошибками у нас под Oracle, он возвращает VARCAR ине CLOB, как нам нужно! текст огромен, и нам нужно, чтобы он был CLOB !
вот что я пытался сделать!
создать таблицу CLOB_T типа CLOB!
затем создайте функцию
create or replace
function listaggclob (t in clob_t)
return clob
as
ret clob := '';
i number;
begin
i := t.first;
while i is not null loop
if ret is not null then
ret := ret || ' ';
end if;
ret := ret || t(i);
i := t.next(i);
end loop;
return ret;
end;
теперь, если я ее запущу:
SELECT
p_id,
MAX(registered) AS registered,
listaggclob(cast(collect (MESSAGE) as clob_t)) MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;
Я получу
ORA-22814: значение атрибута или элементабольше, чем указано в типе
есть ли какое-то решение для этого?
спасибо вам