CREATE OR REPLACE FUNCTION GET_TOKEN(TEXTO IN VARCHAR2, POSICION IN NUMBER, SEPARADOR IN VARCHAR2 DEFAULT '|') RETURN VARCHAR2 IS
tmpVar NUMBER;
/*
retorna el substring indicado en POSICION de la cadena TEXTO utilizando el
separador indicado
Ejemplo:
select get_token('1234|ABC', 1, '|'), get_token('1234ABC', 1, '|') from dual
retorna '1234' y '1234ABC'
*/
VALOR VARCHAR2(32767) := '';
POSTTEXTO VARCHAR2(32767) := TEXTO;
CONTADOR NUMBER := 1;
BEGIN
IF ((LENGTH(TEXTO) = 0) OR (POSICION = 0)) THEN
RETURN NULL;
END IF;
WHILE ((CONTADOR < ABS(POSICION)) AND (LENGTH(POSTTEXTO) > 0)) LOOP
IF (SUBSTR(POSTTEXTO, SIGN(POSICION), 1) = SEPARADOR) THEN
CONTADOR := CONTADOR + 1;
END IF;
IF POSICION > 0 THEN
POSTTEXTO := SUBSTR(POSTTEXTO, 2);
ELSE
POSTTEXTO := SUBSTR(POSTTEXTO, 1, LENGTH(POSTTEXTO) - 1);
END IF;
END LOOP;
IF (LENGTH(POSTTEXTO) = 0) THEN
RETURN NULL;
END IF;
WHILE ((SUBSTR(POSTTEXTO, SIGN(POSICION), 1) <> SEPARADOR) AND (LENGTH(POSTTEXTO) > 0)) LOOP
IF POSICION > 0 THEN
VALOR := VALOR || SUBSTR(POSTTEXTO, 1, 1);
POSTTEXTO := SUBSTR(POSTTEXTO, 2);
ELSE
VALOR := SUBSTR(POSTTEXTO, -1, 1) || VALOR;
POSTTEXTO := SUBSTR(POSTTEXTO, 1, LENGTH(POSTTEXTO) - 1);
END IF;
END LOOP;
RETURN VALOR;
END;
miércoles, 6 de julio de 2011
ORACLE función para retornar subcadenas
Suscribirse a:
Entradas (Atom)