Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить проверку целостности на время транзакции / 9 сообщений из 9, страница 1 из 1
11.04.2003, 18:27
    #32139160
__Алексей
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить проверку целостности на время транзакции
Необходимо отключить констрейнты для закачки данных (две таблицы имеют "циклическую ссылку" :) ). Слышал что можно на время транзакции откл. проверку целостности. Подскажите пож. синтаксис. (Только начал с Oracle разбираться)
...
Рейтинг: 0 / 0
11.04.2003, 18:31
    #32139166
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить проверку целостности на время транзакции
...
Рейтинг: 0 / 0
11.04.2003, 18:39
    #32139185
__Алексей
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить проверку целостности на время транзакции
А Вы не могли бы написать небольшой пример?
...
Рейтинг: 0 / 0
11.04.2003, 18:45
    #32139191
__Алексей
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить проверку целостности на время транзакции
Или тогда как можно сделать все констрейнты deferable?
...
Рейтинг: 0 / 0
11.04.2003, 18:50
    #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
11.04.2003, 18:59
    #32139204
__Алексей
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить проверку целостности на время транзакции
Спасибо за ответ.
Но у меня проблема в том что база создавалась ErVin и все констрейнты без Deferable можно ли всем сказать одним предложением что они Deferable?
...
Рейтинг: 0 / 0
11.04.2003, 19:08
    #32139207
__Алексей
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить проверку целостности на время транзакции
А почему не работает подобное предложение?

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

В ERwin'е у Relationship нет опции, что они deferrable. Откровенно говоря, в ERwin'е много чего нет из свойст оракловых объектов;) Я выкручиваюсь следующим образом: создал Relationship UDP c именем deferrable, и текст на создание constraint'ов генерю сам, на темплейтах, где через макросы определяю это свойство.
...
Рейтинг: 0 / 0
12.04.2003, 08:40
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить проверку целостности на время транзакции / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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