Oracle - Conversion de varchar a date con fechas invalidas

 
Vista:

Conversion de varchar a date con fechas invalidas

Publicado por KAR (12 intervenciones) el 25/06/2007 17:52:34
Hola!

Necesito pasar a un nuevo campo tipo date los valores de un campo varchar2, y tengo los siguientes problemas, ojala alguien tenga una sugerencia:

1. hay datos invalidos
2. debo detectar si es invalido y debo poner un null
3. NO debe tardar tanto el procedimiento, yo habia pensado hacerlo asi pero tarda demasiado:

PROCEDURE SP_VARCHAR_TO_DATE IS

--35,677 distintas fechas
CURSOR CFECHAS IS
SELECT DISTINCT VF_NAC FROM empleados;

NO_FECHA EXCEPTION;
PRAGMA EXCEPTION_INIT(NO_FECHA, -01861);

NO_MES EXCEPTION;
PRAGMA EXCEPTION_INIT(NO_FECHA, -01843);

NO_FECHA_TO_MES EXCEPTION;
PRAGMA EXCEPTION_INIT(NO_FECHA, -01839);

VFECHA VARCHAR2(15):=NULL;

BEGIN

FOR VFECHAS IN CFECHAS
LOOP

VFECHA:=VFECHAS.VFECHANAC;

UPDATE EMPLEADOS
SET DF_NAC=TO_DATE(VFECHANAC,'yyyy/mm/dd')
where VF_NAC=VFECHAS.VF_NAC;

COMMIT;

END LOOP;


EXCEPTION

WHEN NO_FECHA THEN

UPDATE EMPLEADOS
SET DF_NAC=to_DATE('01/01/1900','DD/MM/YYYY')
WHERE VF_NAC=VFECHA;
COMMIT;

WHEN NO_MES THEN
UPDATE EMPLEADOS
SET DF_NAC=to_DATE('01/01/1900','DD/MM/YYYY')
WHERE VF_NAC=VFECHA;
COMMIT;

WHEN NO_FECHA_TO_MES THEN

UPDATE EMPLEADOS
SET DF_NAC=to_DATE('01/01/1900','DD/MM/YYYY')
WHERE VF_NAC=VFECHA;
COMMIT;

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE ('ERROR DE CONVERSION CON LA FECHA:'||SQLERRM(SQLCODE));

END SP_VARCHAR_TO_DATE;
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:Conversion de varchar a date con fechas invalid

Publicado por Rodolfo Reyes (445 intervenciones) el 26/06/2007 18:23:44
Podrias disminuir el tiempo si no pones tantos exceptions, yo solo pondria una.

PROCEDURE SP_VARCHAR_TO_DATE IS

CURSOR CFECHAS IS
SELECT DISTINCT VF_NAC FROM empleados;

VFECHA VARCHAR2(15):=NULL;

BEGIN

FOR VFECHAS IN CFECHAS
LOOP

begin

'CONVIERTES LA EL STRING EN FECHA
VFECHA:= to_date(VFECHAS.VFECHANAC,'DD/MM/YYYY');

EXCEPTION
WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE ('ERROR DE CONVERSION CON LA FECHA:'||SQLERRM(SQLCODE));

end;


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