使用触发器强制使用两个表进行约束

时间:2017-02-27 04:01:21

标签: 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  
        JOIN Laptop  
        ON :NEW.model=Laptop.model;  
    IF mcount!=0  
            THEN RAISE_APPLICATION_ERROR (-20004, "Model Number Violation");  
    END IF;  
END;  

你对我如何解决这个问题有什么建议吗?

1 个答案:

答案 0 :(得分:0)

声明变量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;