Вставка одной записи за раз в несколько таблиц из таблицы - PullRequest
3 голосов
/ 26 февраля 2010

У меня есть одна квартира MAIN_TABLE. Мне нужно вставить записи из этой таблицы в несколько таблиц.

например.

MAIN_TABLE
col1, col2, col3, col4, col5

PARENT1_TABLE
PT1_ID(PK), col1,col2

PARENT2_TABLE
PT2_ID(PK), col3,col4

PARENT2_CHILD_TABLE
P2C_ID(PK), PT2_ID(FK), col5, col6

и т. Д.

Цель состоит в том, чтобы я переместил запись из этой плоской MAIN_TABLE в реляционную структурированную, как я определил выше.

Любая помощь будет высоко ценится?

Спасибо

Ответы [ 2 ]

7 голосов
/ 26 февраля 2010

В 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

2 голосов
/ 26 февраля 2010

Если бы это было в SQL Server, вы могли бы создать представление вашего MAIN_TABLE, а затем написать триггер INSTEAD OF INSERT в представлении. Таким образом, когда вы INSERT записываете в ваше MAIN_TABLE представление, ваш триггер может анализировать ее в ваших дочерних таблицах. Ссылка добра .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...