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 触发器中动态评估伪记录 (:OLD, :NEW)