2013-10-28 31 views
1

我必須創建一個觸發器,將'NoOfCustomers'添加到STORE表中。如果客戶數量大於限制,則會顯示錯誤消息。我試圖運行觸發器時收到錯誤「壞綁定變量NEW.NOOFCUSTOMERS」,我似乎無法解決原因。Oracle SQL錯誤PLS-00049:壞綁定變量'NEW.NOTFCUSTOMERS'

CREATE OR REPLACE TRIGGER NoOfCustomersTrigger 
     BEFORE INSERT ON STORE 
     FOR EACH ROW 
     DECLARE V_CAPACITY SHOPS.LIMIT%TYPE; 
    BEGIN 
      SELECT LIMIT INTO V_LIMIT 
      FROM SHOPS, SERVES 
      WHERE CUSTID = SERVES.CUSTID AND STORENO = :NEW.STORENO; 
      IF (:NEW.NOOFCUSTOMERS > V_LIMIT) THEN 
      RAISE_APPLICATION_ERROR (-20004,'The Number of Customers exceeds the LIMIT'); 
      END IF; 
     END; 
+0

我才意識到,我需要在它創建已經NOOFCUSTOMERS? – BrownEye

+0

你問你是否需要'NOOFCUSTOMERS'預先存在於表中?由於pl/SQL代碼在編譯時評估表結構,答案是肯定的。 – Mureinik

+0

是的,我剛纔問過之後就明白了。現在我有兩個錯誤:1)PL/SQL:ORA-00918:不明確定義的列2)PL/SQL:忽略SQL語句 – BrownEye

回答

1

它看起來像有在你的代碼的一些錯誤,

  1. 使用V_LIMIT在聲明部分,而不是V_CAPACITY,因爲你是用你的代碼v_limit
  2. sql語句將拋出column ambiguously defined錯誤,必須將列引用爲TABLE.COLUMN_NAME或TABLE_ALIAS.COLUMN_NAME。

嘗試這樣,

CREATE OR REPLACE 
TRIGGER noofcustomerstrigger 
     BEFORE INSERT ON STORE 
     FOR EACH ROW 
DECLARE v_limit shops.LIMIT%TYPE; 
BEGIN 
    SELECT LIMIT INTO v_limit 
    FROM shops A, serves b 
    WHERE A.custid = b.custid AND storeno = :NEW.storeno; 

    IF (:NEW.noofcustomers > v_limit) THEN 
      raise_application_error (-20004,'The Number of Customers exceeds the LIMIT'); 
    END IF; 
END;