使用触发器对两个表实施约束
Using Triggers to enforce constraints with two tables
我正在尝试创建一个触发器,以确保任何插入 PC table 的型号 ID 都不会存在于膝上型电脑 table 中。我对该语句进行了多次编辑,但不断收到警告:创建的触发器存在编译错误。
CREATE OR REPLACE TRIGGER chk_models
BEFORE INSERT ON PC
FOR EACH ROW
DECLARE mcount :=0;
BEGIN
SELECT COUNT(*)
INTO mcount
FROM PC
JOIN Laptop
ON :NEW.model=Laptop.model;
IF mcount!=0
THEN RAISE_APPLICATION_ERROR (-20004, "Model Number Violation");
END IF;
END;
你对我如何解决这个问题有什么建议吗?
声明变量 mcount
的数据类型并对文本使用单引号。另外,连接是多余的,所以我删除了它。
这应该适合你:
CREATE OR REPLACE TRIGGER chk_models
BEFORE INSERT ON PC
FOR EACH ROW
DECLARE
mcount int :=0;
BEGIN
SELECT COUNT(*)
INTO mcount
from Laptop
where model = :NEW.model;
IF mcount!=0
THEN RAISE_APPLICATION_ERROR (-20004, 'Model Number Violation');
END IF;
END;
我正在尝试创建一个触发器,以确保任何插入 PC table 的型号 ID 都不会存在于膝上型电脑 table 中。我对该语句进行了多次编辑,但不断收到警告:创建的触发器存在编译错误。
CREATE OR REPLACE TRIGGER chk_models
BEFORE INSERT ON PC
FOR EACH ROW
DECLARE mcount :=0;
BEGIN
SELECT COUNT(*)
INTO mcount
FROM PC
JOIN Laptop
ON :NEW.model=Laptop.model;
IF mcount!=0
THEN RAISE_APPLICATION_ERROR (-20004, "Model Number Violation");
END IF;
END;
你对我如何解决这个问题有什么建议吗?
声明变量 mcount
的数据类型并对文本使用单引号。另外,连接是多余的,所以我删除了它。
这应该适合你:
CREATE OR REPLACE TRIGGER chk_models
BEFORE INSERT ON PC
FOR EACH ROW
DECLARE
mcount int :=0;
BEGIN
SELECT COUNT(*)
INTO mcount
from Laptop
where model = :NEW.model;
IF mcount!=0
THEN RAISE_APPLICATION_ERROR (-20004, 'Model Number Violation');
END IF;
END;