Un problema que me sucedio radicó en que requería hacer desde una vista ya existente un INSERT INTO hacia una tabla destino, esta vista tenía una columna que hacía de identificador, pero al ver la consulta me di cuenta que utilizaba un UNION, era más o menos así:
insert into tabla (id, col1)
select rownum id, xyz from t1
union
select rounum id, zyx from t2
El problema no era la consulta ya que esta arrojaba resultado, la problematica se encontraba que el id generado no era unico, ya que en ambos casos el rownum partía de 1, lo que provocaba un error en el insert into.
La solución fue, crear un trigger que incrementara una secuencia y el valor lo depositara en ID,
create or replace trigger TRG_tabla
before insert on tabla
for each row
begin
if inserting then
if :NEW.ID is null then
select SQ_tabla.nextval into :NEW.ID from dual;
end if
end if
end;
eliminar del insret into la columna ID, y luego ejecutar el insert into, con esto se solución el error de clave duplicada.
insert into tabla (col1)
select xyz from t1
union
select zyx from t2