触发器不会工作

问题描述:

我创建触发器检查广告表中的付款,并应更新另一个表(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? –

请同时提供表格创建语句,以便重现您的错误。

这里有两个可能的问题。如果这不能解决错误,请更改这些问题并更新问题。

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; 

Rajesh Chamarthi谢谢你的回应你的代码不会工作,但是很有帮助,找出我的bubs。在NEW值前丢失的冒号和

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

And Work!

+0

@亚历山大 - 相反,这似乎是一个答案,特别是对另一个工作的改进,据称是非工作的答案。 –