Convertir cadena de exto en una fila SQL ordenada



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:

2 comentarios:

  1. Muchas gracias por el contenido, me gustaría saber como devuelvo el resultado de la tabla en un string.

    ResponderEliminar