Помогите с foreign key

ArtVT
Дата: 10.08.2005 18:25:10
Прошу извинить меня за глупый вопрос, просто Oracle у нас недавно, кто ставил уехал на юг, SQLем тоже он занимался, я остался один, читать извините нечего.
Тут как назло поменять надо значение в таблице, но таблицы связаные, при попытке изменить выдает ошибку ORA-02292: integrity constant (SARATOV.D_RUK_D_OPERAT_FK) violated - child record found
С этим понятно, нашел где надо поправить еще, но не могу!!
Подсказали что надо на время изменения отключить foreign key, но как правильно я не знаю.
ПЛЗ, подскажите где и как это можно попровить. Перед глазами только SQL Navigator 4.4. Используем что-то типа Forms and reports, база в другом городе.
Заранее большое спасибо за ответы на столь идиотский вопрос:)
softwarer
Дата: 10.08.2005 18:38:44
Прежде всего от имени пользователя SARATOV выполните запрос

select deferrable from user_constraints where constraint_name = 'D_RUK_D_OPERAT_FK'

Если там написано DEFERRABLE - тогда Вам повезло. Делаете так:

set constraint D_RUK_D_OPERAT_FK deferred
... все действия по изменению записи и ссылающихся на нее
commit

Если же написано NOT DEFERRABLE... полагаю, проще всего будет в SQL Navigator-е получить текст команды создания этого внешнего ключа, удалить его (DROP CONSTRAINT такойто), создать заново, выполнив эту команду с добавлением в конце ключевого слова DEFERRABLE, и далее - см. выше :)
Vadim Zh
Дата: 10.08.2005 18:49:20
Лучше так:
1.ALTER TABLE saratov DISABLE CONSTRAINT d_ruk_d_operat_fk
2.Ваши изменения
3.ALTER TABLE saratov ENABLE CONSTRAINT d_ruk_d_operat_fk

С уважением, Вадим.
ArtVT
Дата: 10.08.2005 18:52:44
Большое спасибо!! Сейчас буду пробовать!:)
Vadim Zh
Дата: 10.08.2005 18:54:06
Измени saratov на имя таблицы :)

С уважением, Вадим.
ArtVT
Дата: 10.08.2005 20:01:14
Vadim Zh
Лучше так:
1.ALTER TABLE saratov DISABLE CONSTRAINT d_ruk_d_operat_fk
2.Ваши изменения
3.ALTER TABLE saratov ENABLE CONSTRAINT d_ruk_d_operat_fk


Извини пожалуйста, он пишет ошибку ORA-00905: missing keyword и курсор устанавливает на CONSTANT. Видимо ему оператор не нравиться. Или я что сделал не так???
Заранее спасибо!!
SY
Дата: 10.08.2005 20:16:06
CONSTANT != CONSTRAINT

SY.
softwarer
Дата: 10.08.2005 21:59:04
Vadim Zh
Лучше так:

Блин. Такой простой вариант забыл :) Хотя стоит отметить, что deferred лучше тем, что не отрубает проверку в других транзакциях.
SQLap
Дата: 11.08.2005 09:31:36
ArtVT
Vadim Zh
Лучше так:
1.ALTER TABLE saratov DISABLE CONSTRAINT d_ruk_d_operat_fk
2.Ваши изменения
3.ALTER TABLE saratov ENABLE CONSTRAINT d_ruk_d_operat_fk


Извини пожалуйста, он пишет ошибку ORA-00905: missing keyword и курсор устанавливает на CONSTANT. Видимо ему оператор не нравиться. Или я что сделал не так???
Заранее спасибо!!


CONSTRAINT - это ограничение
CONSTANT - что это было?!