【问题标题】:Oracle 12 Unique constraint for row combinationOracle 12 行组合的唯一约束
【发布时间】:2017-09-13 11:22:13
【问题描述】:

我有 3 列:A, B, C。 A 是 pkid,B 和 C 是 Varchars。我已经写了这样一个约束: CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。这可以防止插入值“x”和“y”两次,但如果“x”和“y”值已经存在,我也想防止插入“y”和“x”。 有没有办法把这个约束放进去?

【问题讨论】:

    标签: oracle unique-constraint


    【解决方案1】:

    您可以创建基于函数的索引:

    create unique index unique_data2 (least(b,c), greatest(b,c));
    

    这只有在两个值都不能为空时才有效。如果可以,您可以执行以下操作:

    create unique index unique_data2 
      ( least(nvl(b,'~),nvl(c,'~'))
      , greatest(nvl(b,'~),nvl(c,'~'))
      );
    

    其中 '~' 是一个字符串,你知道它永远不会是 b 或 c 的实际值。

    【讨论】:

    • 它们永远不能为空,就像一个魅力!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2012-05-17
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多