Oracle 使用触发器对两个表强制执行约束

Oracle 使用触发器对两个表强制执行约束,oracle,sqlplus,Oracle,Sqlplus,我正在尝试创建一个触发器,以确保PC表中的任何插入都没有笔记本电脑表中已经存在的型号ID。我对语句进行了几次编辑,但不断收到警告:触发器是用编译错误创建的 CREATE OR REPLACE TRIGGER chk_models BEFORE INSERT ON PC FOR EACH ROW DECLARE mcount :=0; BEGIN SELECT COUNT(*) INTO mcount FROM PC

我正在尝试创建一个触发器,以确保PC表中的任何插入都没有笔记本电脑表中已经存在的型号ID。我对语句进行了几次编辑,但不断收到警告:触发器是用编译错误创建的

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;