listagg to funkcja wprowadzona w Oracle 11.2! teraz ta funkcja jest podsłuch nam przeznaczyć jesteśmy migracji z MySQL do Oracle i mamy to zapytanie:alternatywa dla listagg w 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;
to działa dobrze w MySQL ile wiemy co gryzie nas jest pod Oracle zwraca VARCAR i nie CLOB, jak potrzebujemy! tekst jest ogromny i potrzebujemy go, aby być CLOB!
Oto, co próbowałem zrobić!
utwórz tabelę CLOB_T typu CLOB!
następnie utworzyć funkcję
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;
teraz jeśli uruchomię go:
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;
uzyskać
ORA-22814: atrybut lub wartość elementu jest większa niż określona w rodzaju
Czy istnieje jakieś rozwiązanie dla niego?
dziękuje
+1 dzięki za link do zbierania! – tbone
Napisałem własną funkcję i zaktualizowałem swoje pytanie, ponownie przejrzyj moje pytanie, dziękuję –
Nie wiem, dlaczego otrzymujesz ten błąd - prawdopodobnie warto go opublikować jako nowe pytanie, ale dostaniesz więcej osób patrząc na to w ten sposób. –