Adsense

jueves, 29 de mayo de 2014

Crear en SQL de Oracle una función tipo Implode de php

Implode en php es una maravillosa función que nos permite agrupar y separar con una cadena determinada a una serie de elementos de un array en una cadena. Muchas veces nos facilitaria la vida tener una función similar a través de sql donde agrupemos y separemos en un campo el resultado de una consulta sql, y aunque Oracle no la tiene, puede ser programada. En la versión de Oracle 9i o superior se puede hacer algo como esto:
CREATE OR REPLACE 
FUNCTION IMPLODE (p_cursor  sys_refcursor, p_del  VARCHAR2)
RETURN VARCHAR2
IS
    l_value   varchar2(32767);
    l_result  varchar2(32767);
BEGIN
    loop
        fetch p_cursor into l_value;
        exit when p_cursor%notfound;
        if l_result is not null then
            l_result := l_result || p_del;
        end if;
        l_result := l_result || l_value;
    end loop;
    return l_result;
END;

Para su uso sólo hace falta realizar una consulta del tipo:
SELECT
IMPLODE(CURSOR(SELECT A.DESCRIPCION FROM TABLA A), '-' )
FROM
DUAL

Y podemos ver que funciona.

Claro mi cabeza no da para pensar en esas cosas, no tengo conocimientos de cursores ni nada de eso, la función fue copiada sin niguna autorización de esta página. Y con todo y eso le doy muchas gracias al autor. Allí también se puede contar con la implementación de un split.


No hay comentarios: