Вставить зависимые записи сразу в две таблицы? - PullRequest
2 голосов
/ 24 октября 2011

Я работал над модулем администрирования моего проекта, и мне пришлось вставлять значения в 2 или более таблиц одновременно, так как они зависят друг от друга и связаны через первичный ключ. Так, например, table1 - это здание, которое соединено с table2 (кровли) и table3 (экстерьеры) через building_number, и необходимо добавить новое здание, тогда мне нужно соответствующим образом обновить кровли и экстерьеры.

В любом случае, в Oracle 10g можно вставлять значения в 2 или более таблиц с помощью одного оператора SQL? Я пытался использовать внутреннее соединение, но это не работает. Что может быть лучшим решением в такой ситуации.

Спасибо

Ответы [ 4 ]

3 голосов
/ 24 октября 2011

Насколько я знаю, вы не можете передать 2 ссылки на таблицы в INSERT.Но вы можете определить свои ограничения FK как DEFERRABLE, чтобы они проверялись при фиксации транзакции, а не при вставке данных в таблицы.Взгляните на этот пример

2 голосов
/ 25 октября 2011

Вы можете использовать многостольную вставку, используя INSERT ALL

С уважением,
Роб.

2 голосов
/ 24 октября 2011

Как правило, у вас есть промежуточная таблица между зданием и кровлей, а также зданием и экстерьером, если вы хотите, чтобы ссылка шла обоими путями, или имели отношения один ко многим или многие ко многим (не уверен, применимо ли это в твоем случае).

В вашем случае вы создадите новое здание, кровлю и внешние объекты без ссылок друг на друга. Поскольку они не имеют ссылок, нет ограничений FK при добавлении ваших объектов. Затем вы добавляете запись в таблицу buildingRoofing, которая связывает здание с кровлей, и запись в таблице buildingExteriors, которая связывает здание с экстерьером. Наконец, вы фиксируете свои изменения.

0 голосов
/ 24 октября 2011

Я не представляю каких-либо преимуществ для производительности при вставке значений в две таблицы с одним и тем же оператором, но попробуйте эту ссылку.

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