como ignorar errores en plsql

CHEMIAN
15 de Septiembre del 2005
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?

jose isasa
15 de Septiembre del 2005
declare
cursor c is select * from [email protected] ;
begin
FOR reg IN c loop
begin
insert into tabla
values (reg.campo,reg.campo);

exception
when dup_val_on_index then
dbms_output.put_line( \\'Registro duplicado \\' ||reg.id);

end;
end loop;
end;

panda
15 de Septiembre del 2005
capturalos.....
EXCEPTIONS

chemian
15 de Septiembre del 2005
el problema es que si los llevo al exception sale del procedimiento y yo quiero que siga por donde iba, insertando la siguiente linea.

chemian
15 de Septiembre del 2005
quiza la pregunta seria como puedo hacer una insert como por ejemplo
INSERT INTO TABLA1 SELECT * FROM TABLA2
ignorando la inserciones de aquellos que no cumplan la primary key.
Creo que pido algo imposible.
o no?

Jor-El
15 de Septiembre del 2005
¿ Esto no te vale ?

INSERT INTO TABLA2
SELECT * FROM TABLA1
WHERE TABLA1.PK NOT IN
( SELECT TABLA2.PK )

Ó esto otro

insert into tabla2
select * from tabla1
where pk in ( select pk from
(
select tabla1.pk
minus
select tabla2.pk
)
)

Enga, que seguro que te vale, pillin