我有一个包含两列的“ TEST”表,如下所示:
create table TEST (
SEQ_NUM NUMBER NOT NULL,
SWITCH VARCHAR2(1))
switch列从应用程序接收输入为0或1。 对于特定的SEQ_NUM值,我们可以具有任意数量的行,其中Switch值为0。 但是对于特定的SEQ_NUM值,我们只能有一个SWITCH值为1的记录。
我尝试创建这样的约束,但是它抛出语法错误:
CREATE UNIQUE INDEX EMP_INDEX
ON TEST(
(CASE
WHEN SWITCH = 1
THEN UNIQUE (SEQ_NUM)
ELSE
NULL
END));
更清楚地说,输出应如下所示:
SQL>插入TEST(SEQ_NUM,SWITCH)值(3,0);
SQL>已创建1行。SQL>插入TEST(SEQ_NUM,SWITCH)值(3,0);
SQL>已创建1行。
SQL>插入TEST(SEQ_NUM,SWITCH)值(3,1);
SQL>已创建1行。SQL>插入TEST(SEQ_NUM,SWITCH)值(3,1);
ORA错误:查询插入失败,并出现xyz错误----如果我第二次插入,查询应该抛出错误。
答案 0 :(得分:3)
从CASE表达式中删除UNIQUE
:
CREATE UNIQUE INDEX EMP_INDEX
ON TEST(CASE WHEN SWITCH = 1 THEN SEQ_NUM ELSE NULL END);
在线示例:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=d3ac889aa5127bb2511cb4db611f4981