Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Каскадное обновление таблиц / 6 сообщений из 6, страница 1 из 1
14.12.2005, 13:14
    #33435473
VMichael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскадное обновление таблиц
Здравствуйте!

Подскажите пожалуйста, как в DB2 реализовать каскадное обновление связанных таблиц.

Например, есть скрипт:
Код: plaintext
1.
2.
3.
4.
5.
create table table1 (col1 char not null primary key);
create table table2 (col1 char not null primary key, col2 char references table1 (col1));
insert into table1 values ('1');
insert into table2 values ('1', '1');
update table1 set col1='2' where col1='1';

Все проходит до команды update - на нее ошибка "The parent key in a parent row of relationship XXX cannot be updated".
Каскадные удаления проходят с использование ON DELETE CASCADE в описании таблицы, а как быть с изменениями?
...
Рейтинг: 0 / 0
14.12.2005, 13:48
    #33435603
Herr Developer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскадное обновление таблиц
VMichael
Все проходит до команды update - на нее ошибка "The parent key in a parent row of relationship XXX cannot be updated".
Каскадные удаления проходят с использование ON DELETE CASCADE в описании таблицы, а как быть с изменениями?
ON UPDATE NO ACTION
ON UPDATE RESTRICT

только такие rules есть для ON UPDATE
Тобишь или 2-ой UPDATE statement или trigger "спасет"
...
Рейтинг: 0 / 0
14.12.2005, 16:05
    #33436098
VMichael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскадное обновление таблиц
Herr Developer
2-ой UPDATE statement или trigger "спасет"


А как их применить?

Если 2-ой UPDATE должен обновлять подчиненную таблицу и быть таким:
Код: plaintext
1.
update table2 set col2='2' where col2='2'
то как заставить DB2 не выполнять проверку связей между двумя операторами?
SET INTEGRITY ... OFF- не проходит, так как заодно он запрещает работу с таблицей.

Тригер BEFORE UPDATE вроде как не позволяет изменять другие таблицы.
...
Рейтинг: 0 / 0
14.12.2005, 16:32
    #33436191
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскадное обновление таблиц
В том то весь прикол.
Сначала доваьте строку с новым значением в главную табличку. протом пробегитесь по всем зависимым табличкам (сделайте изменения) а потом - удалите старую строку.
Вы наверное хотели бы чтоб DB2 сама за вас все это сделала?
...
Рейтинг: 0 / 0
14.12.2005, 17:16
    #33436325
Herr Developer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскадное обновление таблиц
Никогда неприходилось менять primary key...
Видимо, как gardenman говорит...
Может можно это оформить как INSIDE OF TRIGGER, чтобы было "прозрачно"?
...
Рейтинг: 0 / 0
14.12.2005, 17:37
    #33436401
VMichael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскадное обновление таблиц
Сначала доваьте строку с новым значением в главную табличку. протом пробегитесь по всем зависимым табличкам (сделайте изменения) а потом - удалите старую строку.

Хитро, но работает надежно.
Спасибо!
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Каскадное обновление таблиц / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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