【问题标题】:Conditional Constraint on field level字段级别的条件约束
【发布时间】:2019-09-12 13:54:44
【问题描述】:

我有一个包含 2 列的表“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-error : 查询插入失败,出现 xyz 错误 ---- 如果我第二次插入,查询应该抛出错误。

【问题讨论】:

  • 非常感谢!!这真的很有帮助:) 我错过了

标签: oracle


【解决方案1】:

从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 2011-06-24
    • 2013-08-22
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多