como ignorar errores en plsql
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?
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?
declare
cursor c is select * from tabla@dblink ;
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;
cursor c is select * from tabla@dblink ;
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;
el problema es que si los llevo al exception sale del procedimiento y yo quiero que siga por donde iba, insertando la siguiente linea.
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?
INSERT INTO TABLA1 SELECT * FROM TABLA2
ignorando la inserciones de aquellos que no cumplan la primary key.
Creo que pido algo imposible.
o no?
¿ 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
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
