2014-05-05 118 views
-1

我創建觸發器檢查廣告表中的付款,並應更新另一個表(customer_account)是否有人知道錯誤在哪裏?觸發器不會工作

CREATE OR REPLACE TRIGGER Payment_check 
    after UPDATE ON Ads 
    FOR EACH ROW 
    BEGIN 
    IF NEW.Pay_done==('y'||'Y')THEN 
    UPDATE customer_account SET customer_account.Plcd_ads = NEW.Ad_id 
    WHERE customer_account.C_id = NEW.Customer; 
    ELSE 
    UPDATE customer_account SET customer_account.Pend_ads = NEW.Ad_id 
    WHERE customer_account.C_id = NEW.Customer; 
    END IF; 
    END; 


//////bug 

Error at line 7: PLS-00103: Encountered the symbol "." when expecting one of the                following: 

    mod 
    continue current sql execute forall merge 
pipe purge 
The symbol "" was substituted for "." to continue. 

5. IF NEW.Pay_done==('y'||'Y')THEN 
6. UPDATE customer_account SET customer_account.Plcd_ads = NEW.Ad_id 
7. WHERE customer_account.C_id = NEW.Customer; 
8. ELSE 
9. UPDATE customer_account SET customer_account.Pend_ads = NEW.Ad_id 
+0

爲什麼這個標記爲mysql? –

回答

5

請同時提供表格創建語句,以便重現您的錯誤。

這裏有兩個可能的問題。如果這不能解決錯誤,請更改這些問題並更新問題。

1)新的運營商需要由前綴 「:」

2)來檢查pay_done標誌可能只是條件 「上(:NEW.Pay_done)= 'Y'」

CREATE OR REPLACE TRIGGER Payment_check 
AFTER UPDATE 
    ON Ads 
FOR EACH ROW 
BEGIN 
    IF upper(:NEW.Pay_done) = 'Y' THEN 
     UPDATE customer_account SET customer_account.Plcd_ads = :NEW.Ad_id 
     WHERE customer_account.C_id = NEW.Customer; 
     ELSE 
     UPDATE customer_account SET customer_account.Pend_ads = :NEW.Ad_id 
     WHERE customer_account.C_id = :NEW.Customer; 
    END IF; 
END; 
0

Rajesh Chamarthi謝謝你的迴應你的代碼不會工作,但是很有幫助,找出我的bubs。在NEW值前丟失的冒號和

 IF NEW.Pay_done==('y'||'Y')THEN 
    changed for 
    IF NEW.Pay_done=('y'||'Y')THEN 

And Work!

+0

@亞歷山大 - 相反,這似乎是一個答案,特別是對另一個工作的改進,據稱是非工作的答案。 –