Oracle唯一约束或索引

问题描述 投票:0回答:1

如果我在Oracle数据库中具有下表:

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

我希望一辆面包车(可能有很多)只能有一个状态为“有效”的行-我需要采取什么样的约束才能确保以下插图不会发生(即第2行和5不应该被允许)

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

谢谢。

oracle constraints
1个回答
0
投票

您可以使用以下条件在提到的列上创建唯一索引:

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>

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.