Oracle - como ignorar errores en plsql

 
Vista:

como ignorar errores en plsql

Publicado por chemian (75 intervenciones) el 08/09/2005 13:57:53
Tengo un procedimiento que inserta en una tabla con una primary key el contenido de otra tabla igual pero de otra bbdd ( a traves de un dblink).
El caso es que al insertar, me da el famoso error de la PK violada, ya que intenta insertar duplicado, y efectivamente es lo que tiene que hacer. Mi problema es que al dar el error, la ejecucion del procedimiento para y yo quiero que siga con la insercion de los siguientes.

¿Alguien sabe como puedo hacer para ignorar errores en un procedimiento de pl?
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:como ignorar errores en plsql

Publicado por yomisma (5 intervenciones) el 08/09/2005 14:58:14
controla la exception con DUP_VAL_ON_INDEX que es para el error de primary key

cuando de este error que no haga nada


begin

insert into mitabla
values (...)

EXCEPTION
DUP_VAL_ON_INDEX then

null;

END;

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:como ignorar errores en plsql

Publicado por chemian (75 intervenciones) el 12/09/2005 08:38:21
Esto me valdria, pero el problema es que los insert estan dentro de un loop y yo no puedo meter el exception dentro del loop
¿verdad?
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:como ignorar errores en plsql

Publicado por yomisma (1 intervención) el 12/09/2005 09:28:46
por que no?

loop

begin
insert into ...

exception
when dup_val_on_index then
null;
end ;


end loop

lo que harias es que continuara el bucle si eso es lo que quieres..

si quieres que salga del loop pon la exception fuera del loop

begin
loop

end loop;

exception
when dup_val_on_index then
null;
end ;


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:como ignorar errores en plsql

Publicado por chemian (75 intervenciones) el 12/09/2005 09:40:43
Creo que asi es como me dices que se puede hacer, pero me da error de compilacion, me dice:

<<PLS-00103:
Se ha encontrado el símbolo "EXCEPTION" cuando se esperaba uno de los siguientes:

begin case declare end exit for goto if loop mod null pragma
raise return select update while with
FOR r_itemkey in c_itemkeys loop>>

IF r_itemkey.POR_SNAP='FALSE' THEN
sql_aux := 'insert into ' || r_itemkey.TABLA_CYRIS || ' select sn.*,sysdate, ''' || bbdd_name ||''' from ' || r_itemkey.TABLA_DB_LINK ||' sn ' ;

ELSE
sql_aux := 'insert into ' || r_itemkey.TABLA || ' select sn.*,sysdate, ''' || bbdd_name ||''' from ' || r_itemkey.TABLA_DB_LINK ||' sn WHERE SNAP_ID >(SELECT NVL(MAX(SNAP_ID),0) from ' || r_itemkey.TABLA || ' WHERE SYSTEMA=''' || bbdd_name ||''' ) ';

END IF;

execute immediate sql_aux;
commit;

exception
when dup_val_on_index then
null;
end ;

end loop;

Te explico que es lo que hace:
Entro en un for que lo que me va dando son tablas donde insertar datos, y dentro del for decido si hago un insert u otro con una condicion. si algun insert me da error no quiero que haga nada y que siga con la siguiente tabla.

Muchas gracias por tu ayuda
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:como ignorar errores en plsql

Publicado por yomisma (1 intervención) el 12/09/2005 10:09:37
hola

tienes que poner el begin dentro del bucle porque tienes un end dentro

un saludo
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:como ignorar errores en plsql

Publicado por chemian (75 intervenciones) el 12/09/2005 10:57:25
Muchisimas gracias.

Ahora si que puedo, lo unico es que el error que me da es

<<restricción de integridad (CYRIS.FK_TH_STATS$SNAPSHOT_9I) violada - clave principal no encontrada>>

es el mismo error que me decias que se contemplaba con dup_val_on_index??

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

RE:como ignorar errores en plsql

Publicado por chemian (75 intervenciones) el 12/09/2005 11:21:15
OK, no hace falta, ya lo he encontrado.

Muchisimas gracias por tu ayuda yomisma.

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