listagg è una funzione introdotta in Oracle 11.2! ora questa funzione è intercettazioni noi assegniamo, stiamo migrando da MySQL a Oracle e abbiamo questa query:alternativa a listagg in 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;
è funziona bene in MySQL per quanto sappiamo ciò che ci intercettazioni è sotto Oracle che restituisce VARCAR e non CLOB di cui abbiamo bisogno! il testo è enorme e abbiamo bisogno che sia CLOB!
ecco cosa ho provato a fare!
creare una tabella CLOB_T di tipo CLOB!
quindi creare la funzione
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;
ora se faccio funzionare:
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;
ottengo
ORA-22814: attributo o elemento è maggiore del valore specificato in caratteri
c'è qualche soluzione per questo?
ringrazia
+1 grazie per il link di raccolta! – tbone
Ho scritto la mia funzione e ho aggiornato la mia domanda, per favore rivedi la mia domanda di nuovo, grazie –
Non so perché stai ricevendo quell'errore - probabilmente vale la pena di postarlo come una nuova domanda, ma otterrai più persone guardandolo in quel modo. –