powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление данных из 2-й таблицы
9 сообщений из 9, страница 1 из 1
Обновление данных из 2-й таблицы
    #32158088
Dmitriy Pascal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 2 таблицы, table1 и table2. Структура полей этих таблиц идентичны.
Table1 рабочая таблица базы, имеет ограничения целостности и связана с другими таблицами БД. Table2 является созданной временно таблицей без индексов, связей и т.д.
table2 является обновлением для table1 и данные в table1 нужно заменить на table2. Самое простое решение это удалить все записи из table1 и добавить все из table2. Но это не дает сделать ограничения целостности и связи.
Как правильно перегнать данные из table2 в table1 путем замены старого на новое и удаление лишних записей из table1?
Помогите.
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158128
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Но это не дает сделать ограничения целостности и связи."

Связь - это имеется ввиду FOREIGN KEY? Тогда это тоже ограничение целостности.

А почему бы раз навсегда не написать скрипт, типа:
1) alter table table1 disable primary key cascade
2) alter table table1 disable constraint <имя> cascade -- столько команд сколько ограничений
3) truncate table table1
4) insert into table1 select * from table2
5) alter table table1 enable primary key
6) alter table table1 enable constraint <имя> -- столько команд сколько ограничений
7) Поднять все внешние ключи других таблиц выключенные в п.п. 1,2.
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158144
Dmitriy Pascal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Все замечательно, но мне таким способом нужно обновить до 50 таблиц.
Интересно вот эту строчку:
alter table table1 disable constraint <имя> cascade -- столько команд сколько ограничений
можно ли заменить только одной, что бы за раз снять все ограничение, можно же как то получить список ограничений?
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158152
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный вы человек, сначала пишете "Есть 2 таблицы, table1 и table2", когда вам дают решение, вы говорите "но мне таким способом нужно обновить до 50 таблиц.".

А что нельзя было сразу написать - "У меня есть 50 таблиц,в которые нужно перегнать данные из других 50 таблиц."

Нравится играть в кошки-мышки?
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158230
Alex_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия Oracle какая?
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158243
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если операция переноса данных периодически поворяется, то можно попробовать пересоздать ограничения с опцией DEFERRABLE. Для FOREIGN KEY это особого труда не составит, для PRIMARY и UUNIQUE KEY потребуется изменить используемый индекс на неуникальный. Тогда отключение/включение ограничений будет производится одной командой:
Код: plaintext
1.
2.
set constraints all deferred;
set constraints all immediate;

Минусов несколько:
- единожды придется пересоздать все ограничения.
- весь перенос данных придется осуществлять в одной транзакции.
- если при COMMIT'е будет обнаружено нарушение целостности - вся транзакция автомитически откатится.

Впрочем, если ты осилишь написание скрипта на пересоздание всех ограничений- использовать его же для disable/enable этих же ограничений не составит труда;)
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158277
Dmitriy Pascal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softbuilder@inbox.ru, спасибо за ответ, видимо это то что мне нужно, если не будет дополнений. И все таки возможно ли как нибудь получить список ограничений для таблицы что бы не корректировать и не прописывать все это для всех 50 таблиц?
Alex_M, 9.2.0 под Linux RH7.2, на самом деле нужно перегонять таблицы из парадокса. Все это дело сильно тормозит.
Denis Popov, минусов много. Кстати если расматривать пример softbuilder при
alter table table1 enable constraint <имя> и нарушенной целостности что произойдет?
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158315
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это тебе дорога на чтение Concept'а: "DDL statements implicitly commit the preceding and start a new transaction." http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c16sqlpl.htm#478

А отключить ограничения целостности в самом простом варианте:
Код: plaintext
1.
2.
3.
select 'alter table '||table_name||' disable constraint '||constraint_name||';' code
from user_constraints 
where constraint_type = 'R';

выполнив получившийся результат как скрипт. Можно оформить все это в виде одного скрипта, процедуры и т.д., по желанию.
...
Рейтинг: 0 / 0
Обновление данных из 2-й таблицы
    #32158862
Alex_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 9-ке появилась команда merge позволяющая проводить update/insert в одной операции, т.е. для существующих записей будет update, а для новых insert. Пример:

merge into table_old o
using (select id, code, name from table_new) n
on (o.id=n.id)
when matched then update set o.code=n.code, o.name=n.name
when not matched then insert (o.id, o.code, o.name)
values (n.id, n.code, n.name)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление данных из 2-й таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]