ORACLE / PL SQL TRIGGER unit_tbl という住宅プロパティを扱うテーブルがあります。
プライマリ複合キーは (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;
/
DECLARING 変数と SELECT INTO 変数の実行も試みましたが、フェッチする行が多すぎるというエラーが発生するようです。
私は PL / SQL を初めて使用するので、ご理解とご協力をお願いいたします。