我想創建一個觸發器,就像一個異常,不會讓無序對在數據集中被插入或更新兩次。唯一對約束的觸發器
例如,給定集合{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