Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当我有条件时添加唯一列_Sql_Oracle_Unique Index - Fatal编程技术网

Sql 当我有条件时添加唯一列

Sql 当我有条件时添加唯一列,sql,oracle,unique-index,Sql,Oracle,Unique Index,我有一张桌子,这是桌子的字段 project_labor PROJECT_NO, LABOR_ID, STATUS “状态”字段有两个值(完成或未完成) 如果状态值为(完成),则可以重复人工id 但如果状态值为(未完成),则人工id必须是唯一的您可以使用函数索引(默认情况下,跳过单列索引的值): 完整脚本: CREATE TABLE project_labor(PROJECT_NO INT, LABOR_ID INT, STATUS VARCHAR2(10)); CREATE UNIQUE

我有一张桌子,这是桌子的字段

project_labor
PROJECT_NO, LABOR_ID, STATUS
“状态”字段有两个值(完成或未完成)
如果状态值为(完成),则可以重复人工id

但如果状态值为(未完成),则人工id必须是唯一的

您可以使用函数索引(默认情况下,跳过单列索引的值):

完整脚本:

CREATE TABLE project_labor(PROJECT_NO INT, LABOR_ID INT, STATUS VARCHAR2(10));

CREATE UNIQUE INDEX IX_name 
ON project_labor (CASE WHEN STATUS='complete' THEN NULL ELSE labor_id END);

INSERT INTO project_labor(project_no,status,labor_id) VALUES(1, 'uncomplete', 1);
INSERT INTO project_labor(project_no,status,labor_id) VALUES(2, 'uncomplete', 1);
-- ORA-00001: unique constraint (IX_NAME) violated

INSERT INTO project_labor(project_no,status,labor_id) VALUES(3, 'complete', 2)
INSERT INTO project_labor(project_no,status,labor_id) VALUES(4, 'complete', 2)

SELECT * FROM project_labor
它相当于其他RDBMS的部分索引:


//

到目前为止,你都试过什么,你能把它贴出来吗\
CREATE TABLE project_labor(PROJECT_NO INT, LABOR_ID INT, STATUS VARCHAR2(10));

CREATE UNIQUE INDEX IX_name 
ON project_labor (CASE WHEN STATUS='complete' THEN NULL ELSE labor_id END);

INSERT INTO project_labor(project_no,status,labor_id) VALUES(1, 'uncomplete', 1);
INSERT INTO project_labor(project_no,status,labor_id) VALUES(2, 'uncomplete', 1);
-- ORA-00001: unique constraint (IX_NAME) violated

INSERT INTO project_labor(project_no,status,labor_id) VALUES(3, 'complete', 2)
INSERT INTO project_labor(project_no,status,labor_id) VALUES(4, 'complete', 2)

SELECT * FROM project_labor