ORACLE/PL SQL觸發器 我有一個處理住宅屬性的表,名爲unit_tbl。Oracle PL SQL觸發器 - 使數據一致
主要組合鍵是(unit_num,complex_num和owner_num),所以許多所有者可以在同一個組合中擁有相同的單位。
其他列包括num_of_bedrooms(即4,3,2,1)和property_type(即房屋,雙層,公寓,公寓)。
假設被輸入如下語句:
INSERT INTO unit_tbl
(unit_id, complex_id, owner_id, num_beds, property_type)
VALUES
(001, 1000, 010, 3, 'apartment');
我想,這樣如果同一UNIT_ID和complex_id再過所有者(同一屬性的)簽訂募集的錯誤,如果num_beds這是否不符合之前的條目,或者如果屬性類型與前一條目不匹配。
INSERT INTO unit_tbl
(unit_id, complex_id, owner_id, num_beds, property_type)
VALUES
(001, 1000, 011, 2, 'apartment'); -- num_beds here does not match the same property previously entered.
我試圖創建觸發器:
CREATE OR REPLACE TRIGGER unit_consist_check
BEFORE INSERT OR UPDATE ON unit_tbl
FOR EACH ROW
DECLARE
BEGIN
IF :NEW.unit_id = :OLD.unit_id AND :NEW.complex_id=:OLD.complex_id AND (:NEW.num_beds <> :OLD.num_beds OR :NEW.property_type <> :OLD.property_type) THEN
raise_application_error (-20002, 'nconsistent data on bedroom size or property type. Please make sure this data is identical to previously entered data for this specific unit_id and complex_id');
END IF;
END;
/
我也嘗試宣告
舉例來說,如果有人要插入或更新如下錯誤將引發變量和做一個SELECT INTO變量,但似乎給出了一個關於提取太多行的錯誤。
我是PL/SQL新手,非常感謝您的幫助和耐心。
一個單位怎麼可能有多個所有者 - 你也持有歷史數據嗎?更重要的是,(a)你爲什麼不把這些單位放在一張桌子上,並將所有權放在另一張桌子上,以保證完整性;和(b)如果某人改造一個單位以添加/移除臥室會發生什麼? – 2013-05-04 09:22:31
另外'OLD'和'NEW'指的是當前行,所以你的比較只能在'UPDATE'上工作。那個觸發器發生了什麼 - 錯誤,還是沒有提出異常? – 2013-05-04 09:26:17
嗨亞歷克斯,這種設計是考慮到可能有兩個兄弟誰擁有相同的單位或兄弟和姊妹,可以擁有一個單位...複合鍵考慮到多個owner_id在complex(complex_id)中擁有單個unit_id .... owner的ARE保存在單獨的表中,它們是unit_tbl中的外鍵/複合主鍵的一部分。 – user2349371 2013-05-04 09:29:28