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


0