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