我想创建一个触发器,就像一个异常,不会让无序对在数据集中被插入或更新两次。唯一对约束的触发器
例如,给定集合{A,B},其中A和B都是主键且列中存在{A,B}的列,我不想让集合{B,A}去因为这种关系已经用{A,B}定义了。
这里是我的尝试,但它给Trigger created with compilation errors.
,我也看不到如何做到这一点对new
和old
信息。
CREATE TRIGGER pair
BEFORE INSERT OR UPDATE ON pairing
DECLARE exists_pair NUMBER;
BEGIN
SELECT MAX(COUNT_VAL) INTO exist_pair
FROM (SELECT COUNT(*) FROM pairing p, pairing p2 WHERE p2.element_one = p.element_two AND p.element_one = p2.element_two)
IF exist_pair > 0 THEN
RAISE SOME_EXCEPTION;
END IF;
END;
显然这不是我想要的,但它提供了一个想法。这将每次返回0,直到出现错误条目,然后它会说每个条目有效或无效......所以这不是我想要的,但我不知道如何在此上下文中使用:new
和:old
。
这对oracle有效。
下面是一个例子的SQLfiddle插入失败了: http://sqlfiddle.com/#!4/1afb7/1/0
使'(element_one,element_two)'有一个唯一的约束(我认为你已经拥有了这个)并添加一个检查约束'element_one
Laurence
2014-09-20 22:41:32
如果第一次插入时e1 = B且e2 = A会怎么样? – DCookie 2014-09-20 23:09:06
表中已经存在element_one> element_two,它不是一个想要的约束。 – robert7080 2014-09-20 23:46:57