powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить проверку целостности на время транзакции
9 сообщений из 9, страница 1 из 1
Как отключить проверку целостности на время транзакции
    #32139160
__Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо отключить констрейнты для закачки данных (две таблицы имеют "циклическую ссылку" :) ). Слышал что можно на время транзакции откл. проверку целостности. Подскажите пож. синтаксис. (Только начал с Oracle разбираться)
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139166
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139185
__Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А Вы не могли бы написать небольшой пример?
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139191
__Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или тогда как можно сделать все констрейнты deferable?
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139197
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничения можно сделать deferred, и только те, которые изначально создавались с опцией deferrable.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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;


Такая вот связь один-к-одному. Но стоит сказать:

Код: plaintext
1.
set constraint fk_test_test2 immediate;


Как тут же получаешь:

Код: plaintext
1.
2.
3.
insert into test values ( 2 );

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


Возвращаем- все проходит

Код: plaintext
1.
2.
3.
4.
set constraint fk_test_test2 deferred;
insert into test values ( 2 );
insert into test2 values ( 2 );
commit;


Еще есть:

Код: plaintext
1.
2.
set constraints all deferred;
set constraints all immediate;
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139204
__Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ.
Но у меня проблема в том что база создавалась ErVin и все констрейнты без Deferable можно ли всем сказать одним предложением что они Deferable?
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139207
__Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему не работает подобное предложение?

alter table IC_STATE
MODIFY CONSTRAINT SYS_C001297 deferrable initially deferred
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139208
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того, чтобы существующие constraint'ы стали deferrable, требуется из пересоздать. Напиши запрос по библиотечному словарю, создай скрипт на пересоздание и выполни его. Кстати, свойство deferrable бывает не только у foreign constraint'ов, но и у check, unique.

В ERwin'е у Relationship нет опции, что они deferrable. Откровенно говоря, в ERwin'е много чего нет из свойст оракловых объектов;) Я выкручиваюсь следующим образом: создал Relationship UDP c именем deferrable, и текст на создание constraint'ов генерю сам, на темплейтах, где через макросы определяю это свойство.
...
Рейтинг: 0 / 0
Как отключить проверку целостности на время транзакции
    #32139301
Mergen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так неподойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
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 
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить проверку целостности на время транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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