Oracle - Excepciones

 
Vista:

Excepciones

Publicado por sara (2 intervenciones) el 06/04/2009 16:00:44
Hola, estoy realizando un procedimiento y me salta una excepcion de "fecha incorrecta para el mes especificado", me gustaria saber si hay alguna forma de hacer que esa excepcion no me salte y poder seguir con el siguiente registro del cursor.

Un saludo.
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:Excepciones

Publicado por Sergio (79 intervenciones) el 07/04/2009 02:08:05
Lo correcto sería que aproveches esa EXCEPCION para conocer CUAL de los registros tiene el problema con la fecha al momento de que lo tratas de insertar ¿NO CREES?
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:Excepciones

Publicado por sara (2 intervenciones) el 07/04/2009 08:41:09
El problema es que necesito cambiar una columna texto que guarda fechas, en una nueva columna fecha. Lo que hago es hacer un cursor que me recorra la tabla e ir insertando esas fechas en la nueva columna. Hay fechas que estan erroneas y me gustaria saber si puedo obviar esa excepcion y seguir con el siguiente registro del cursor.

Un saludo y 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

RE:Excepciones

Publicado por pacopaz (20 intervenciones) el 07/04/2009 18:06:19
Si es un cursor, entonces, por lo menos, debe ser un script lo que ejecutas (quizás un sp).
Bajo esta consideración, por que no aseguras el formato del texto antes de mandar ejecutar la instrucción? Una secuencia de if's puede ser solución, a sabiendas que esperas cierto formato, e incluso puedes corregir los problemas antes de que se presenten.
Si lo tuyo no es prevenir, si no pasar por alto, entonces lee esta página:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm

Espero que 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

RE:Excepciones

Publicado por Sergio (79 intervenciones) el 07/04/2009 18:09:15
aah eso ya es diferente, puedes crear un bloque anónimo anidado dentro de tu código para hacer lo que necesitas, ejemplo:

DECLARE
dFecha DATE := NULL;
BEGIN
dbms_output.put_line('Inicia ejecucion');

DECLARE
valida_fecha VARCHAR2(20) := '7-AP-09';
BEGIN
dFecha := to_date(valida_fecha, 'dd-mon-yy');
dbms_output.put_line('Fecha valida');
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Fecha no valida');
END;

dbms_output.put_line('Continua ejecucion');
END;

Con esto sabes que si después de ejecutar el bloque anónimo anidado la variable dFecha es NULL, entonces hay un problema en la misma.

El ejemplo sólo te da una idea general, ya que en lugar de mostrar el mensaje "Fecha no valida" puedes mostrar la llave primaria o algún otro identificador que te haga ubicar posteriormente todos los registros que tienen la fecha en forma errónea, o mejor aún mandar la información directamente a un archivo usando utl_file.
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:Excepciones

Publicado por jejarami (18 intervenciones) el 08/04/2009 17:18:22
Hola, puedes hacer lo siguiente por ej..

declare
cursor c_ejemplo is -- tu cursor
SELECT '08/04/2009' fecha from dual
UNION
SELECT 'Lo que sea' from dual
UNION
SELECT '09/04/2009' from dual;

lc_ejemplo c_ejemplo%rowtype;

begin

for lc_ejemplo in c_ejemplo loop
begin
insert into xyz(fecha) values (lc_ejemplo.fecha);

exception
when others then
NULL;-- o lo que desees controlar
end;
end loop;

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