Oracle - CADENAS DE CARACTERES A REGISTROS

 
Vista:

CADENAS DE CARACTERES A REGISTROS

Publicado por Edier (3 intervenciones) el 18/03/2015 20:15:27
Hola amigos...
como hago para convertir una cadena separada por comas en registros correspondientes a campos de una tabla...
por ejemplo... la cadena es...

A,B,C; D,E,F;

donde cada letra de la cadena corresponde a un campo de la tabla y el ; es el separador de cada linea...
espero su ayuda muchas gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

CADENAS DE CARACTERES A REGISTROS

Publicado por Rafael (328 intervenciones) el 23/03/2015 14:43:21
con SQLLoader...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CADENAS DE CARACTERES A REGISTROS

Publicado por Edier (3 intervenciones) el 23/03/2015 16:36:19
Disculpe pero deseo conocer como realizarlo con plsql
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CADENAS DE CARACTERES A REGISTROS

Publicado por Alixandro (63 intervenciones) el 23/03/2015 16:01:53
puedes guardalor como un archivo excel y utilizar el TOAD para que lo migre. Es fácil y sencillo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CADENAS DE CARACTERES A REGISTROS

Publicado por Edier (3 intervenciones) el 23/03/2015 16:36:51
Disculpe pero deseo conocer como realizarlo con plsql
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CADENAS DE CARACTERES A REGISTROS

Publicado por Alixandro (63 intervenciones) el 23/03/2015 21:51:05
En este caso te presento tres alternativas; 1) con SQLLoader, 2) Utilizando el paquete de oracle UTL_FILE y 3) Creando una tabla externa usando el archivo como base. estos si no quieres utilizar herramientas de un tercero.

en google.com, puedes encontrar bastante información sobre estas tres formar de hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

CADENAS DE CARACTERES A REGISTROS

Publicado por Jorge (21 intervenciones) el 23/03/2015 21:17:34
Donde tienes la cadena? en alguna tabla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

CADENAS DE CARACTERES A REGISTROS

Publicado por Hugo QN (3 intervenciones) el 28/03/2015 01:48:44
esto hice en MySQL como SP y esto es invocado por un WS,recibe la data y procesa como lo vez.
Pasalo a oracle y puedes poner en un SP o Trigger

DECLARE as_cadena VARCHAR(65500) := 'A,B,C,D,E;A,B,C,,E;A,,,D,E;'

DECLARE ls_valores VARCHAR(80);
DECLARE li_posini NUMERIC DEFAULT 1;
DECLARE li_posfin NUMERIC DEFAULT 1;
DECLARE li_elemen INTEGER;

DECLARE ls_bloque CHAR(1);
DECLARE ls_id VARCHAR(10);
DECLARE ls_nombres VARCHAR(25);
DECLARE ls_paterno VARCHAR(25);
DECLARE ls_materno VARCHAR(25);
DECLARE li_existe INTEGER;

WHILE li_posfin > 0 DO
SET li_posfin = LOCATE(',', as_cadena, li_posini);
SET ls_valores = SUBSTRING(as_cadena, li_posini, li_posfin - li_posini);

IF ls_valores = ';' THEN
SET ls_bloque = ls_valores;
SET li_elemen = 1;
ELSE
SET li_elemen = li_elemen + 1;
END IF;

IF li_elemen = 2 THEN
SET ls_id = RIGHT(CONCAT('0000000000', ls_valores), 10);
END IF;

IF li_elemen = 3 THEN
SET ls_nombres = ls_valores;
END IF;

IF li_elemen = 4 THEN
SET ls_paterno = ls_valores;
END IF;

IF li_elemen = 5 THEN -- 1...5 es por la cantidad de datos ('A,B,C,D,E;') por ello se debe completar la catidad de separadores ('A,,,D,E;')
SET ls_materno = ls_valores;
END IF;

IF li_elemen = 5 AND ls_bloque = ';' THEN
SET li_existe = (SELECT COUNT(id) FROM mi_tabla WHERE id = ls_id);

IF li_existe = 0 THEN
INSERT INTO mi_tabla(id, Nombres, ApellidoPaterno, ApellidoMaterno)
VALUES (ls_id, ls_nombres, ls_paterno, ls_materno);
ELSE
UPDATE mi_tabla SET Nombres = ls_nombres, ApellidoPaterno = ls_paterno, ApellidoMaterno = ls_materno WHERE id = ls_id;
END IF;
END IF;

SET li_posini = li_posfin + 1;
END WHILE;


espero te sirva.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar