Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/06/2013, 03:41
Avatar de zarwar
zarwar
 
Fecha de Ingreso: mayo-2013
Ubicación: Madrid
Mensajes: 77
Antigüedad: 10 años, 11 meses
Puntos: 4
Respuesta: Split con parámetros (SQL ORACLE)

Por lo que te he entendido, te da igual, que sea una cadena o una serie de registros.

La opción que pusiste, entiendo que te serviría salvo que sobrarían los valores, que determinan la longitud de la cadena, aunque si lo estás planteando es porque no puedes evitar tenerlas y supongo, que tampoco podrás incluir otro caracter especial por ejemplo un '|', para delimitar registros. La verdad es que es una información redundante, ya que los asteríscos ya determina el principio y fin.

Meter mano a la expresión regular lo veo complicado.

Yo la opción que se me ocurre es hacer una función PL/SQL, para limpiar la cadena previamente.

Código SQL:
Ver original
  1. SELECT LEVEL,
  2.        regexp_substr(fn_limpia_cadena('2*C29*ABCDEB_349*ABCDIB_352*N 221*ABCDEFGHIJ KL MNONICO0*2*O212*AAAAAAAAAAAA22*ARBCPRTVNSTUN CRBVGYYHS'),'[^*]+', 1, level)
  3.   FROM dual
  4. CONNECT BY LEVEL <= REGEXP_COUNT(fn_limpia_cadena('2*C29*ABCDEB_349*ABCDIB_352*N221*ABC DEFGHIJ KL MNONICO0*2*O212*AAAAAAAAAAAA22*ARBCPRTVNSTUN CRBVGYYHS'),'[^*]+');

Siendo fn_limpia_cadena una función que recibe como parámetro la cadena inicial y quitaría las longitudes de las cadenas.
Para ello recorrería con un bloque WHILE e iría mediante funciones substr e instr por un lado descomponiendo la cadena y por otro componiendo el resultado de la función.

No se a lo mejor a alguien se le ocurre alguna opción mejor.

Un saludo
__________________
Entra en mi blog sobre base de datos Oracle:
http://mundodb.es