listagg es una función introducida en Oracle 11.2! Ahora bien, esta función está molestando nos asignamos, estamos migrando de MySQL a Oracle y que tiene la siguiente consulta:alternativa a listagg en 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;
es funciona bien en MySQL por lo que sabemos lo que nos molesta es menor de Oracle que devuelve VARCAR y no ¡CLOB como lo necesitamos! el texto es enorme y necesitamos que sea CLOB!
¡esto es lo que traté de hacer!
crear una tabla CLOB_T de tipo CLOB!
continuación, crear la función
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;
ahora si lo ejecuto:
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;
consigo
ORA-22814: valor de atributo o elemento es mayor que la especificada en el tipo
¿hay alguna solución para ello?
le da las gracias
+1 ¡gracias por el enlace de recopilación! – tbone
Escribí mi propia función y actualicé mi pregunta, por favor revise mi pregunta nuevamente, gracias –
No sé por qué está recibiendo ese error; sin embargo, probablemente valga la pena publicarlo como una nueva pregunta, obtendrá más personas mirándolo de esa manera. –