【问题标题】:ORACLE trigger check if each value of a row is different to each otherORACLE触发器检查一行的每个值是否彼此不同
【发布时间】:2013-05-02 18:13:52
【问题描述】:

如果所有值彼此不同(NULL 除外),是否可以在插入和更新时进行比较?我有 10 列数字,不想为每种可能性写一个 if 语句。

示例:

column_1 | column_2 | column_3
--------------------------------
   5           2          4        <- allowed to insert
   1           2          1        <- forbidden to insert/update, because there are two '1' in a row

【问题讨论】:

  • 你的意思是你想检查每一列的值与其他每一列?即 col1 col2 和 col1 col3... 和 col2 col3 等?为什么?如果不明确比较,你会怎么做?
  • 行的每个值都必须与同一行的每个其他值不同
  • 也许会创建一个唯一的约束??
  • 唯一约束仅对每列起作用,而不是在一行本身中。单行中的值应该彼此不同

标签: oracle plsql triggers


【解决方案1】:

我认为您需要进行明确的比较。您可以使用 CHECK 约束进行比较,如

CREATE TABLE SOME_TABLE
  (COL1   NUMBER,
   COL2   NUMBER,
   COL3   NUMBER,
   COL4   NUMBER,
   COL5   NUMBER,
   COL6   NUMBER,
   COL7   NUMBER,
   COL8   NUMBER,
   COL9   NUMBER,
   COL10  NUMBER,
   CONSTRAINT SOME_TABLE_CK1
     CHECK(COL1  NOT IN (COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10) AND
           COL2  NOT IN (COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10) AND
           COL3  NOT IN (COL4, COL5, COL6, COL7, COL8, COL9, COL10) AND
           COL4  NOT IN (COL5, COL6, COL7, COL8, COL9, COL10) AND
           COL5  NOT IN (COL6, COL7, COL8, COL9, COL10) AND
           COL6  NOT IN (COL7, COL8, COL9, COL10) AND
           COL7  NOT IN (COL8, COL9, COL10) AND
           COL8  NOT IN (COL9, COL10) AND
           COL9  NOT IN (COL10)));

分享和享受。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 2018-07-26
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多