2017-02-27 47 views
0

我正在嘗試創建一個觸發器,以確保向PC表中插入的任何模型ID都不具有已存在於筆記本電腦表中的模型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; 

對於如何解決這個問題你有什麼建議嗎?

回答

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; 
+0

它的工作。非常感謝你 - 非常感謝。 –