Oracle

Cadena a tabla en Oracle

Hace algunos días en mi actual proyecto se presento la necesidad de mostrar la información de una cadena pero en forma de tabular.

Al principio no se me ocurría como, pero rascandole un poquito a google di con la solución, estoy trabajando bajo una 10g por lo que no estoy seguro que funcione con versiones anteriores de Oracle.

Primero creamos un “TYPE” que usara la función que después crearemos:

1
CREATE OR REPLACE TYPE str2tblType AS TABLE OF VARCHAR2(500);

Después creamos la función que se encarga de convertir la cadena a una tabla de datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE FUNCTION 
   str2tbl( p_str IN VARCHAR2, p_delim IN VARCHAR2 DEFAULT ',' ) 
    RETURN str2tblType
    PIPELINED AS
 
    l_str      VARCHAR2(500) DEFAULT p_str||p_delim;
    l_n        NUMBER;
 
BEGIN
 
    LOOP
        l_n := INSTR( l_str, p_delim );
        EXIT WHEN (NVL(l_n,0) = 0);
        pipe ROW( LTRIM(RTRIM(SUBSTR(l_str,1,l_n-1))) );
        l_str := SUBSTR( l_str, l_n+1 );
    END LOOP;
 
    RETURN;
END;

Por ultimo solo nos basta usarla:

1
SELECT COLUMN_VALUE col FROM TABLE(str2tbl('a,b,c'));

Como se darán cuenta utiliza cosas como los “TYPE” otra como “PIPELINED” y la función “table()” después del “from”, tal vez mas adelante hable de ellas, por el momento se los dejo de tarea.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *