Muchas veces tenemos almacenado un valor
que está separado por un carácter pero en la misma variable o campo, y deseamos
pasarlo a filas separado por el carácter indicado.
Para esto podemos utilizar la función de
Oracle REGEXP_SUBSTR
con la ayuda
de la función CONNECT BY LEVEL.
Ejemplo: Se tiene una cadena con
los nombres más populares de Colombia, se desea que la cadena aparezca en forma
de lista.
--Cadena
Nombres := 'Enrique,Carlos,Monica';
--Codigo
declare
nombres varchar2(200) := 'Enrique,Carlos,Monica' ;
cursor cur_cadena_a_fila is
SELECT REGEXP_SUBSTR(nombres, '[^' || ',' || ']+', 1, LEVEL)
VALOR
FROM DUAL
CONNECT BY REGEXP_SUBSTR(nombres, '[^' || ',' || ']+', 1, LEVEL) IS NOT NULL;
begin
for nombres in cur_cadena_a_fila loop
dbms_output.put_line(nombres.VALOR);
end loop;
End;
Output:
Utilizando
solo el select en la cadena puede
ser.
SELECT
REGEXP_SUBSTR('Enrique,Carlos,Monica', '[^' || ',' || ']+', 1, LEVEL) VALOR
FROM DUAL
CONNECT BY REGEXP_SUBSTR('Enrique,Carlos,Monica', '[^' || ',' || ']+', 1, LEVEL) IS NOT NULL;
Output: