Oracle - TEXT_IO package

 
Vista:

TEXT_IO package

Publicado por Alexandra (17 intervenciones) el 19/07/2001 17:01:27
Hola
Quisiera saber como puedo hacer para leer archivos csv y cargarlos a la Base de Datos usando el TEXT_IO package. Lo que tengo hasta el momento es:

DECLARE
IN_FILE TEXT_IO.FILE_TYPE;
OUT_FILE TEXT_IO.FILE_TYPE;
v_id ERROR.ERRO_ID%type;
v_descripcion ERROR.ERRO_DESCRIPC%TYPE;
v_linea varchar2(500);
existe number;
BEGIN
in_file := Text_IO.Fopen('c:\ejemplo.csv','R');
IF Text_IO.Is_Open(in_file) THEN
loop
TEXT_IO.GET_LINE(IN_FILE,V_LINEA);
v_id := TO_NUMBER(SUBSTR(V_LINEA,1,instr
(V_LINEA,',')-1));
v_descripcion := UPPER(RTRIM(SUBSTR(V_LINEA,instr
(V_LINEA,',')+1,50)));
select count(*) into existe from ERROR
where ERRO_ID = v_id;

IF existe > 0 THEN
UPDATE ERROR set ERRO_DESCRIPC=v_descripcion
where ERRO_ID = v_id;
ELSE
INSERT INTO ERROR(ERRO_ID,ERRO_DESCRIPC)
VALUES(v_id,v_descripcion);
END IF;
END LOOP;
END IF;
END;

Pero me sale un error al acabar de leer todos los registros: ORA 01403 Creo que me falta la condición de que cuando acabe el archivo salga del LOOP pero no se como hacer eso. Por favor ayudenme.

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

RE:TEXT_IO package

Publicado por JFSD (50 intervenciones) el 20/07/2001 01:41:20
Espero te sirva:

El error es porque ya no tienes datos y nunca del loop sale, te envio ora forma de hacerlo.
--------------------------------------------------------

PROCEDURE CARGA_A_BASE IS
EXISTE BOOLEAN NOT NULL := TRUE;
ARCHIVO TEXT_IO.FILE_TYPE; NOMBRE VARCHAR2(40);
LINEA VARCHAR2(200);
BEGIN
NOMBRE := 'C:\\DATA.DAT';
ARCHIVO := TEXT_IO.FOPEN(NOMBRE,'R');
WHILE EXISTE LOOP
BEGIN
TEXT_IO.GET_LINE(ARCHIVO,LINEA);
TEXT_IO.PUT(LINEA);
IF LINEA IS NOT NULL
THEN
INSERT INTO PWK_DATA_FILE(PWDF_LINEA,PWDF_PWDC_ID)
VALUES (LINEA, NULL );
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
TEXT_IO.FCLOSE (ARCHIVO);
EXISTE := FALSE;
END; END LOOP;
:SYSTEM.MESSAGE_LEVEL := 10;
COMMIT;
:SYSTEM.MESSAGE_LEVEL := 0;
END;
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

RE:TEXT_IO package

Publicado por JFSD (50 intervenciones) el 20/07/2001 01:45:40
Marco:

No, necesitas instalar Personal Oracle en tu PC, y desde las versiones 7 en adelante, manejas Store Procecures (Funciones,Package,Trigers de BDD, Constraints). ¿Tienes persona Oracle? Busca un TRIAL VERSION si la necesitas.
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

RE:TEXT_IO package

Publicado por RafaShibiru (1 intervención) el 18/06/2008 16:23:37
hola, pues mira de poner justo antes del END que pertenece al declare:
EXCEPTION
WHEN OTHERS THEN
TEXT_IO.FCLOSE(L_ARCHIVO);
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

RE:TEXT_IO package

Publicado por cchar (2 intervenciones) el 14/01/2009 00:03:02
loop
------------------------------------------------------------------------------------------
--Con esto leera el archivo hasta el fin del mismo.
begin
TEXT_IO.GET_LINE(IN_FILE,V_LINEA);
EXCEPTION
WHEN NO_DATA_FOUND THEN
exit;
end;
-------------------------------------------------------------------------------------
--despues le pones lo que quieres hacer,
-- ent tu caso ........

v_id := TO_NUMBER(SUBSTR(V_LINEA,1,instr(V_LINEA,',')-1));
v_descripcion := UPPER(RTRIM(SUBSTR(V_LINEA,instr(V_LINEA,',')+1,50)));

select count(*)
into existe
from ERROR
where ERRO_ID = v_id;

IF existe > 0 THEN
UPDATE ERROR set ERRO_DESCRIPC=v_descripcion
where ERRO_ID = v_id;
ELSE
INSERT INTO ERROR(ERRO_ID,ERRO_DESCRIPC)
VALUES(v_id,v_descripcion);
END IF;

end loop;
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

RE:TEXT_IO package

Publicado por Robinson (4 intervenciones) el 03/09/2010 19:51:45
Alexandra muy buenas tardes , ya tengo el programa que corre para al generarme la tabla temporal me deja los campos de la tabla que estoy incorporando solo en una linea, como puedo hacer para que me la deje en la tabla y que corresponda la primera columna al primer campo de la tabla y asi sucesivamente.

Muchas gracias por lo que puedas hacer al respecto.

Cordial Saludo

Robinson
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

RE:TEXT_IO package

Publicado por Nelson (2 intervenciones) el 15/10/2010 20:42:23
hola que tal quisiera hacer una consulta que pasa cuando me pide declarar TEXT_IO cuando creo un procedimiento, y de que manera podria areglarlo, de ante mano muchas gracias.
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