Нет в Oracle 9i, нет. В 10.2, Ведение журнала ошибок DML было введено именно то, что вы хотите.
В более ранних версиях наиболее распространенным подходом было бы использование PL / SQL, т.е.
BEGIN
FOR src IN (SELECT field1, field2
FROM source_table)
LOOP
BEGIN
INSERT INTO destination_table( field1, field2 )
VALUES( src.field1, src.field2 );
EXCEPTION
WHEN dup_val_on_index
THEN
<<log the foreign key error>>
END;
END LOOP;
END;
Вы также можете использовать SQL для разделения строк, которые нарушают внешний ключ, т.е.
INSERT INTO error_table( field1, field2 )
SELECT field1, field2
FROM source_table
WHERE NOT EXISTS(
SELECT 1
FROM parent_table
WHERE parent_table.field1 = source_table.field1 );
INSERT INTO destination_table( field1, field2 )
SELECT field1, field2
FROM source_table
WHERE EXISTS(
SELECT 1
FROM parent_table
WHERE parent_table.field1 = source_table.field1 );