CREATE OR REPLACE PROCEDURE leer_txt_reloj AS cont NUMBER; id_max NUMBER; marcas TEXT_IO.FILE_TYPE; registro CHAR(100); v_id_usuario CHAR(6); v_fecha DATE; v_hora DATE; v_marca CHAR(1); cargado NUMBER; fila NUMBER; cargado EXCEPTION; PRAGMA EXCEPTION_INIT(cargado, -00001); BEGIN cargado := 0; fila := 1; /*-----------------------<<<< BUSCO EL ID DE LA TABLA >>>>------------------------*/ SELECT COUNT(id) INTO cont FROM marcas_reloj; IF (cont < 1) THEN id_max := 1; ELSE SELECT MAX(id)+1 INTO id_max FROM marcas_reloj; END IF; /*---------------------------<<<< LEO EL ARCHIVO >>>>-----------------------------*/ marcas := TEXT_IO.FOPEN('C:\Documents and Settings\Cecilia Barrios\Mis documentos\Cecilia\PROYECTOS\RELOJ\MARCAS.TXT', 'R'); LOOP /*-----------<<<< OBTENGO UNA FILA DEL ARCHIVO Y LA GUARDO EN 'registro' >>>>---------*/ TEXT_IO.GET_LINE(marcas, registro); /*----------------------<<<< OBTENGO LOS DATOS DEL REGISTRO >>>>----------------------*/ v_id_usuario := SUBSTR(registro, 3, 6); v_fecha := SUBSTR(registro, 17, 10); v_hora := TO_DATE(LPAD(SUBSTR(registro, 33, 4), 5,'0')||':'||'00','HH24:MI:SS'); v_marca := SUBSTR(registro, 41, 1); /*----------------------<<<< COMPRUEBO SI YA NO ESTA CARGADO >>>>----------------------*/ SELECT id INTO cargado FROM marcas_reloj WHERE id_usuario LIKE v_id_usuario AND trunc(fecha) = trunc(v_fecha) AND hora = v_hora AND entrada_salida = v_marca; IF (cargado = 0) THEN /*-----------------------<<<< INSERTO LOS DATOS EN LA TABLA >>>>------------------------*/ INSERT INTO marcas_reloj VALUES (id_max, v_id_usuario, v_fecha, v_hora, v_marca); SELECT MAX(id)+1 INTO id_max FROM marcas_reloj; cargado := 0; END IF; fila := fila +1; END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN aviso('N', 'El proceso de lectura ha finalizado.'); WHEN others THEN aviso('E', 'Ha ocurrido un error al leer el archivo en la posición: '||fila); END;