Oracle: LISTAGG no compila en un procedimiento


Esto es un "error" al ejecutar un script en Oracle en TOAD o cualquier cliente de Oracle. 

Cuando el script contenga la función LISTAGG.

 
	
    	SELECT LISTAGG(ename, ',') WITHIN group (ORDER BY ename) AS employees
    	INTO  vc_varchar_variable
    	FROM   emp
    	where deptno =10
    	GROUP BY deptno;
    
Al intentar ejecutarlo, se dispara un error con el siguiente mensaje:
	
    	+ERROR line 32, col 12, ending_line 32, ending_col 18, Found 'LISTAGG', 
        Only CUME_DIST, DENSE_RANK, PERCENT_RANK, RANK, PERCENTILE_CONT and PERCENTILE_DISC 
        are valid with WITHIN GROUP
    
La función LISTAGG ordena los datos dentro de cada grupo especificado en la clausula ORDER BY y concatena los valores de la columna. Pero es una función para Oracle 11, si tienes Oracle 10, debes buscar una alternativa. 

Pero si tu base de datos está en la versión 11, la solución es sencilla. Hay que cambiar la versión del TOAD O del cliente de Oracle que estas usando. Las versiones antiguas no contemplan algunas características. 

Advertencia: si vas a usar LISTAGG, la función está limitada a 4000 caracteres, así que el texto que intentas agrupar va a superar esa capacidad, evalúa otras alternativas. A veces sumarizar en la base de datos no es la mejor solución.

Comentarios