lunes, 5 de septiembre de 2011

Extraer tokens con REGEXP_SUBSTR (Oracle)

Hola:

Muchos lenguejes de programación tienen funciones, clases, etc para extraer los tokens de una cadena ya sea por medio de una expresion regular o por un delimitador, hace ya varios meses me tope con este problemita pero con PL SQL, y un compañero del trabajo se le ocurrio este idea que comparto:

Para nuestro ejemplo sera por el delimitador "-", pero usando una expresion regular por medio de REGEXP_SUBSTR

set serveroutput on;
declare
V_DESC VARCHAR2(200):='1234-Isaac Le-Mew';
N_TOKENS PLS_INTEGER:=0;
V_VAL_RETORNO VARCHAR2(50);
begin
-- Se obtiene el numero de tokens de la cadena
N_TOKENS :=LENGTH(V_DESC) - LENGTH(REPLACE(V_DESC, '-', '')) + 1;
-- Se itera sobre cada uno de los tokens de la cadena
FOR I IN 1 .. N_TOKENS
LOOP
-- Se extrae cada ocurrencia del token empezando siempre desde la posicion 1
V_VAL_RETORNO := REGEXP_SUBSTR(V_DESC,'[^-]+',1,I);
dbms_output.put_line(I||' - '||V_VAL_RETORNO);
END LOOP;
end;
/

el resultado sera algo como lo sisuiente:

anonymous block completed
1 - 1234
2 - Isaac Le
3 - Mew


Saludos, el mundo siempre puede ser mejor....

No hay comentarios.: