lunes, 11 de mayo de 2015

Separar un string en filas de una tabla usando un separador

Hay varias formas de separar un string en varias partes (tokens) usando un separador determinado. En este caso voy a compartir una forma para hacerlo usando una sentencia sql. Dicha sentencia se podria usar en forma aislada o insertarla en un cursor para poder iterar la lista generada en un bloque PL/SQL.

La siguiente query transforma una lista de nombres separados por / en filas de una tabla:

with t as (select 'Pablo/Juan/Pedro/Anibal' as str from dual)
select DISTINCT REGEXP_SUBSTR (str, '[^/]+', 1, level) as nombre
from t
connect by level <= length(regexp_replace(str,'[^/]+'))+1

NOMBRE

Pedro
Pablo
Juan
Anibal

Esta forma usa solo una sentencia sql con expresiones regulares y subquery factoring (claúsula with) y no requiere de crear paquetes para separar el string o usar por ejemplo funciones como APEX_UTIL.STRING_TO_TABLE que necesita tener las utilidades APEX instaladas.