使用触发器对两个表实施约束

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;