Python R2


Parseo de cadena separada por coma en Oracle

Posted in Oracle por Arturo Anton en 6 noviembre 2008
Tags: , , , ,

Hoy con una nota simple quiero inaugurar la sección PL/SQL.
Bueno,…
Más de una ves trabajando en Oracle nos tenemos que enfrentar con el problema de parsear una  cadena y  perdemos el tiempo en hacer una función que haga esto, ya que es un problema bastante común, pero si buscamos en las funciones de Oracle nos daremos cuenta que existe una función dentro de dbms_utility llamada comma_to_table que nos soluciona el problema 🙂

Función dbms_utility.comma_to_table:

dbms_utility.comma_to_table(
list   IN  VARCHAR2,
tablen OUT BINARY_INTEGER,
tab    OUT UNCL_ARRAY);

Un ejemplo que aclara lo que estoy diciendo de esta función podría ser:

DECLARE
cnt        BINARY_INTEGER;
my_table    dbms_utility.uncl_array ;
str VARCHAR(200);
BEGIN
    str :=  'ENERO,MARZO,ABRIL,MAYO,JUNIO';
    dbms_utility.comma_to_table(str,cnt, my_table);
    FOR i IN 1 .. my_table.count LOOP
        Dbms_output.Put_Line(my_table(i));
    END LOOP;
END;

Si la lista es numérica tendríamos que tratarla como en el siguiente ejemplo….

DECLARE
cnt        BINARY_INTEGER;
my_table    dbms_utility.uncl_array ;
str VARCHAR(200);
BEGIN
     str :=  '316,343,328,329,390,391,305,333,558';
     dbms_utility.comma_to_table(REPLACE('"'||str||'"',',','","') ,cnt, my_table);
     FOR i IN 1 .. my_table.count LOOP
         Dbms_output.Put_Line('  '||replace(my_table(i),'"',''));
     END LOOP;
END;