Oracle唯一约束或索引

Oracle唯一约束或索引,oracle,constraints,Oracle,Constraints,如果Oracle数据库中有下表: CREATE TABLE TESTTABLE ( "MYUNIQUEIDCOL" NUMBER(9,0) NOT NULL, "VAN" NUMBER(9,0) NOT NULL, "STATUS" VARCHAR2(30 BYTE) NOT NULL ) 我希望厢式货车(可能有很多)只有一排状态为“活动”-我需要什么样的约束来确保下面的说明不会发生(即不允许第2行和第5行) 谢谢。您可以在上述列上创建唯一索引,条件如下: CREATE UNIQUE

如果Oracle数据库中有下表:

CREATE TABLE TESTTABLE
(   
"MYUNIQUEIDCOL" NUMBER(9,0) NOT NULL, 
"VAN" NUMBER(9,0) NOT NULL, 
"STATUS" VARCHAR2(30 BYTE) NOT NULL
)
我希望厢式货车(可能有很多)只有一排状态为“活动”-我需要什么样的约束来确保下面的说明不会发生(即不允许第2行和第5行)


谢谢。

您可以在上述列上创建唯一索引,条件如下:

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>

干杯

是否可以扩展为使用两个值中的一个(即,如果存在处于活动状态的行,则不允许插入处于活动或非活动状态)?
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>