【问题标题】:Oracle check constraintsOracle 检查约束
【发布时间】:2016-12-29 16:03:29
【问题描述】:

如何在 Oracle SQL 中设置 if 约​​束?

Create Table A(
b varchar(25) primary key,
c varchar(25),
constraint b_1
check(b='name' and c != 'notallowed')
);

以下应该工作:

Insert into A values('name','notallowed');

但这应该工作:

Insert into A values('notname','notallowed');

我怎样才能修复我的约束?

【问题讨论】:

    标签: sql oracle constraints ddl check-constraints


    【解决方案1】:

    如果我理解正确,唯一的非法组合是b='name' and c='notallowed'。如果这是正确的,您可以使用not 运算符来表达:

    CREATE TABLE a (
        b varchar(25) PRIMARY KEY,
        c varchar(25),
        CONSTRAINT b_1
        CHECK(NOT(b = 'name' AND c = 'notallowed'))
    );
    

    【讨论】:

      【解决方案2】:

      另一种写法是:

      create Table A
      (
        b varchar(25) primary key,
        c varchar(25),
        constraint b_1 check ( (b,c) not in (('name', 'notallowed')) )
      );
      

      (是的,IN 列表周围的重复括号在 Oracle 中是必需的)

      【讨论】:

      • 非常优雅! +1!
      【解决方案3】:

      我猜你正在寻找这个

      check ((b='name' and c != 'notallowed') or b != 'name')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 1970-01-01
        相关资源
        最近更新 更多