Oracle уникальное ограничение или индекс - PullRequest
0 голосов
/ 10 февраля 2020

Если бы у меня была следующая таблица в базе данных Oracle:

CREATE TABLE TESTTABLE
(   
"MYUNIQUEIDCOL" NUMBER(9,0) NOT NULL, 
"VAN" NUMBER(9,0) NOT NULL, 
"STATUS" VARCHAR2(30 BYTE) NOT NULL
)

Я бы хотел, чтобы в фургоне (которых могло быть много) всегда была только одна строка со статусом «Активен». "- какие ограничения мне понадобятся, чтобы обеспечить отсутствие иллюстрации ниже (ie. Строки 2 и 5 не должны быть разрешены)

MYUNIQUEIDCOL | VAN  | STATUS
1               100    Active
2               100    Active
3               100    Cancelled
4               200    Active
5               200    Active

Спасибо.

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете создать уникальный индекс для указанного столбца с условием:

CREATE UNIQUE INDEX UQ_VAN_STATUS
ON TESTTABLE (VAN, CASE WHEN STATUS = 'ACTIVE' THEN STATUS END);

Пример:

SQL> INSERT INTO TESTTABLE VALUES (1, 100, 'ACTIVE');

1 row created.

SQL> INSERT INTO TESTTABLE VALUES (1, 100, 'INACTIVE');

1 row created.

SQL> INSERT INTO TESTTABLE VALUES (1, 100, 'ACTIVE');
INSERT INTO TESTTABLE VALUES (1, 100, 'ACTIVE')
*
ERROR at line 1:
ORA-00001: unique constraint (TEJASH.UQ_VAN_STATUS) violated


SQL>

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...