【问题标题】:Oracle: can I create a constraint that checks a value within a groupOracle:我可以创建一个检查组内值的约束吗
【发布时间】:2020-09-28 20:57:24
【问题描述】:

在此先感谢您的帮助。在 Oracle 中,是否可以创建一个约束,以便每个组只能有一个“领导者”:

如果组中已经存在一个“领导者”,我如何创建一个规则来防止插入其他“领导者”?

【问题讨论】:

    标签: oracle database-design triggers constraints


    【解决方案1】:

    这有意义吗?基于函数的唯一索引:

    SQL> create table test (col1 varchar2(10), col2 varchar2(10), col3 varchar2(10));
    
    Table created.
    
    SQL> create unique index ui1t on test (case when col2 = 'leader' then col1||col2 end);
    
    Index created.
    

    测试:

    SQL> insert into test values ('group1', 'leader', 'joe');
    
    1 row created.
    
    SQL> insert into test values ('group1', null    , 'diane');
    
    1 row created.
    
    SQL> insert into test values ('group1', null    , 'john');
    
    1 row created.
    
    SQL> insert into test values ('group1', null    , 'diane');
    
    1 row created.
    
    SQL> insert into test values ('group1', 'leader', 'mike');   --> another LEADER for GROUP1
    insert into test values ('group1', 'leader', 'mike')
    *
    ERROR at line 1:
    ORA-00001: unique constraint (SCOTT.UI1T) violated
    
    
    SQL> insert into test values ('group1', 'leader', null);   --> another LEADER for GROUP1
    insert into test values ('group1', 'leader', null)
    *
    ERROR at line 1:
    ORA-00001: unique constraint (SCOTT.UI1T) violated
    
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多