Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Когда проверяются Check constraints  [new]
Оракл нуб
Guest
Есть таблица, например
  create table no_ass(
   id1 varchar2(10),
   id2 varchar2(10),
   id3 varchar2(10),
....
   idN varchar2(10))'

И есть на нее куча констрейнов
alter table no_ass
  add constraint CH2
  check (id2 <> 'ass');
alter table no_ass
  add constraint CH2
  check (id3 <> 'ass');
......
alter table no_ass
  add constraint CHN
  check (idN <> 'ass');


Изменится ли время выполнения запроса
update no_ass
set id1 = 'ass'
where id1 = 'id1'


Если убрать все констрейнты, затрагивающие другие поля. Иными словами настолько ли оракл умный что не проверяет констрейнт при редактировании поля если он не затрагивает это поле?
5 июн 13, 12:53    [14393892]     Ответить | Цитировать Сообщить модератору
 Re: Когда проверяются Check constraints  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Оракл нуб,

в принципе, ответ на
автор
не проверяет констрейнт при редактировании поля если он не затрагивает это поле?

зависит от внутренней реализации и может в любой момент времени (в любой версии сервера) измениться. причем молча.
покуда (насколько понимаю) проверяется всё, что существует и включено.
при этом - от отключения чеков экономии большой не ждите. имхо, овчинка выделки не стОит.
(не рискуйте данными за три копейки)
5 июн 13, 13:09    [14394022]     Ответить | Цитировать Сообщить модератору
 Re: Когда проверяются Check constraints  [new]
-2-
Member

Откуда:
Сообщений: 15330
orawish
покуда (насколько понимаю) проверяется всё, что существует и включено.
create table ab(
   a number,
   b number
);

insert into ab values (1,10);
insert into ab values (2,20);

alter table ab add constraint ab#a check (b <> 20) novalidate;

update ab
   set a=200, --b=20
   where a=2;
   
1 rows updated.

select * from ab;

  A   B
--- ---
  1  10 
200  20 

update ab
   set b=20
   where a=200;

ORA-02290: check constraint (-2-.AB#A) violated

drop table ab purge;
5 июн 13, 15:12    [14395143]     Ответить | Цитировать Сообщить модератору
 Re: Когда проверяются Check constraints  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
-2-,

угу. спасибо!
и более того - это так не только для чеков столбца, но и для интегральных (уровня строки)

SQL> create table ab(
  2     a number,
  3     b number,
  4     c number
  5  );

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

SQL> insert into ab values (1,1,1);

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

SQL> alter table ab add constraint ab#a check ( b <> c ) novalidate;

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

SQL> update ab set a = 1;

1 строка обновлена.

SQL> update ab set a = 1, b=b;
update ab set a = 1, b=b
*
ошибка в строке 1:
ORA-02290: нарушено ограничение целостности CHECK(SCOTT.AB#A)
5 июн 13, 17:01    [14395987]     Ответить | Цитировать Сообщить модератору
 Re: Когда проверяются Check constraints  [new]
Гхостик
Guest
Еще есть понятие dereferred constraint.
6 июн 13, 07:44    [14397711]     Ответить | Цитировать Сообщить модератору
 Re: Когда проверяются Check constraints  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Гхостик
Еще есть понятие dereferred constraint.

.. а в них есть нюансы, например:
deferred check констрейнты, содержащие преобразования типов
6 июн 13, 14:09    [14399842]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить