ORACLE触发器检查一行的每个值是不是彼此不同

Posted

技术标签:

【中文标题】ORACLE触发器检查一行的每个值是不是彼此不同【英文标题】: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 等?为什么?如果不明确比较,你会怎么做? 行的每个值都必须与同一行的每个其他值不同 也许会创建一个唯一的约束?? 唯一约束仅对每列起作用,而不是在一行本身中。单行中的值应该彼此不同 【参考方案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)));

分享和享受。

【讨论】:

以上是关于ORACLE触发器检查一行的每个值是不是彼此不同的主要内容,如果未能解决你的问题,请参考以下文章

检查用户是不是登录成功 Oracle

如何检查数组中的所有值是不是彼此相等。 C++

在 Oracle 触发器中动态评估伪记录 (:OLD, :NEW)

oracle 怎么检查字段是不是存在某值?

如何编写触发器来检查工资是不是超出工资的最小或最大范围pl-sql Oracle

使用不同的表触发检查条件,然后根据结果更改插入行的值