В Oracle вы можете сделать Вставка в несколько таблиц .
Создать фиктивную таблицу регистрации ошибок
create global temporary table err_dump
(ORA_ERR_NUMBER$ NUMBER,
ORA_ERR_MESG$ VARCHAR2(2000),
ORA_ERR_ROWID$ UROWID(4000),
ORA_ERR_OPTYP$ VARCHAR2(2),
ORA_ERR_TAG$ VARCHAR2(2000));
Затем добавьте уникальный ключ (col1, col2) для parent1 и (col3, col4) для parent2.
Используйте вставку из нескольких таблиц для загрузки в две родительские таблицы. Предложение LOG ERRORS INTO будет означать, что любые дубликаты, попадающие в родительские таблицы, будут исключены.
INSERT ALL
INTO parent1_table (pt1_id, col1,col2)
VALUES (rn, col1,col2)
LOG ERRORS INTO err_dump REJECT LIMIT 99999999
INTO parent2_table (pt2_id, col3, col4)
VALUES (rn, col3, col4)
LOG ERRORS INTO err_dump REJECT LIMIT 99999999
SELECT rownum rn, col1, col2, col3, col4
FROM MAIN_TABLE;
Наконец, сделайте выбор из MAIN, присоединитесь к parent1_table и parent2_table, чтобы получить новые PK, и это простая вставка в PARENT2_CHILD_TABLE