ORACLE / PL SQL TRIGGER 我有一个名为unit_tbl 的用于处理住宅属性的表。
主复合键是(unit_num、complex_num 和 owner_num),因此许多所有者可以在同一个复合体中拥有同一个单元。
其他列包括num_of_bedrooms(即4、3、2、1)和property_type(即house、duplex、apartment、condo)。
假设输入了以下语句:
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;
/
我也尝试过 DECLARING 变量并执行 SELECT INTO 变量,但这似乎会导致获取太多行的错误。
我是 PL/SQL 的新手,非常感谢您的帮助和耐心。