Parseo de cadena separada por coma en Oracle
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;
1 Comment