Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация
  • Страница:
  • 1

ТЕМА:

Oracle: Как отключить проверку целостности на время транзакции 12 года 8 мес. назад #3464

Необходимо отключить констрейнты для закачки данных (две таблицы имеют "циклическую ссылку" :)). Слышал что можно на время транзакции откл. проверку целостности. Подскажите пож. синтаксис. (Только начал с Oracle разбираться)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как отключить проверку целостности на время транзакции 12 года 8 мес. назад #3465

Ограничения можно сделать deferred, и только те, которые изначально создавались с опцией deferrable.

create table test (

    test_id number(9)

  , constraint pk_test primary key(test_id)

)

/

create table test2 (

    test_id number(9)

  , constraint pk_test2 primary key(test_id)

)

/

alter table test add constraint fk_test_test2

foreign key (test_id) references test2

deferrable initially deferred

/

alter table test2 add constraint fk_test2_test

foreign key (test_id) references test

deferrable initially deferred

/

insert into test values (1);

insert into test2 values (1);

commit;


Такая вот связь один-к-одному. Но стоит сказать:
set constraint fk_test_test2 immediate;

Как тут же получаешь:
insert into test values (2);



ORA-02291: integrity constraint (DAN.FK_TEST_TEST2) violated - parent key not found

Возвращаем- все проходит
set constraint fk_test_test2 deferred;

insert into test values (2);

insert into test2 values (2);

commit;

Еще есть:
set constraints all deferred;

set constraints all immediate;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как отключить проверку целостности на время транзакции 12 года 8 мес. назад #3466

Спасибо за ответ.
Но у меня проблема в том что база создавалась ErVin и все констрейнты без Deferable можно ли всем сказать одним предложением что они Deferable?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как отключить проверку целостности на время транзакции 12 года 8 мес. назад #3467

А почему не работает подобное предложение?

alter table IC_STATE
MODIFY CONSTRAINT SYS_C001297 deferrable initially deferred

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как отключить проверку целостности на время транзакции 12 года 8 мес. назад #3468

Для того, чтобы существующие constraint'ы стали deferrable, требуется из пересоздать. Напиши запрос по библиотечному словарю, создай скрипт на пересоздание и выполни его. Кстати, свойство deferrable бывает не только у foreign constraint'ов, но и у check, unique.

В ERwin'е у Relationship нет опции, что они deferrable. Откровенно говоря, в ERwin'е много чего нет из свойст оракловых объектов;)Я выкручиваюсь следующим образом: создал Relationship UDP c именем deferrable, и текст на создание constraint'ов генерю сам, на темплейтах, где через макросы определяю это свойство.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как отключить проверку целостности на время транзакции 12 года 8 мес. назад #3469

И вот еще))
SQL> create table test(id number constraint pktest primary key);



Таблица создана.



SQL> insert into test values(1);



1 строка создана.



SQL> insert into test values(1);



ошибка в строке 1:

ORA-00001: нарушено ограничение уникальности(TEST.PKTEST)



SQL> alter table test modify constraint pktest disable;



Таблица изменена.



SQL> insert into test values(1);



1 строка создана.



SQL> insert into test values(1);



1 строка создана.



SQL> select * from test;



        ID

----------


         1

         1

         1

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Phoebe.
  • Страница:
  • 1
Время создания страницы: 0.229 секунд