Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 частичные ограничения  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
Есть ли возможность создавать частичные ограничения.
Ограничивать значение только для тех строк, которые удовлетворяют определённому условию.
Например: если ID=1 и CURRENCY_ID=2 тогда PERCENT должен быть равен 0.

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
5 авг 16, 12:34    [19504777]     Ответить | Цитировать Сообщить модератору
 Re: частичные ограничения  [new]
элементарно, ватсон
Guest
case
5 авг 16, 12:35    [19504787]     Ответить | Цитировать Сообщить модератору
 Re: частичные ограничения  [new]
А также
Guest
decode
5 авг 16, 12:41    [19504820]     Ответить | Цитировать Сообщить модератору
 Re: частичные ограничения  [new]
-2-
Member

Откуда:
Сообщений: 15330
decode еще нагромоздить надо на два поля, достаточно пары or, если поля not null.
5 авг 16, 12:47    [19504864]     Ответить | Цитировать Сообщить модератору
 Re: частичные ограничения  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
--если ID=1 и CURRENCY_ID=2 тогда PERCENT должен быть равен 0
create table test21 (id integer, currency_id integer, percent number
, constraint check_pct check ( (id, currency_id) not in ((1,2)) or nvl(percent,-1) = 0)
)
create table succeeded.

insert into test21 values(1,2,0)
1 rows inserted

insert into test21 values(10,0,1)
1 rows inserted

insert into test21 values(null,2,3)

1 rows inserted

insert into test21 values(1,2,1)

Error starting at line 9 in command:
insert into test21 values(1,2,1)
Error report:
SQL Error: ORA-02290: check constraint (TEST.CHECK_PCT) violated
02290. 00000 -  "check constraint (%s.%s) violated"
*Cause:    The values being inserted do not satisfy the named check
           
*Action:   do not insert values that violate the constraint.

insert into test21 values(1,2,null)

Error starting at line 11 in command:
insert into test21 values(1,2,null)
Error report:
SQL Error: ORA-02290: check constraint (TEST.CHECK_PCT) violated
02290. 00000 -  "check constraint (%s.%s) violated"
*Cause:    The values being inserted do not satisfy the named check
           
*Action:   do not insert values that violate the constraint.
5 авг 16, 13:43    [19505334]     Ответить | Цитировать Сообщить модератору
 Re: частичные ограничения  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
всем спасибо. всё работает
5 авг 16, 14:18    [19505619]     Ответить | Цитировать Сообщить модератору
 Re: частичные ограничения  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
andrey_anonymous,
отдельное спасибо за пример
5 авг 16, 14:19    [19505626]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить