Oracle 扳机坏了
我创建了一个触发器,用于检查ads表中的付款,并应该更新另一个表(customer_account),有人知道bug在哪里吗Oracle 扳机坏了,oracle,plsql,oracle11g,syntax-error,Oracle,Plsql,Oracle11g,Syntax Error,我创建了一个触发器,用于检查ads表中的付款,并应该更新另一个表(customer_account),有人知道bug在哪里吗 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 = NE
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
还请提供表创建语句,以便很容易再现错误 这里有两个可能的问题。如果这不能修复错误,请更改这些并更新问题 1) 新运算符需要加前缀“:” 2) 检查pay_done标志的条件可以是“upper(:NEW.pay_done)=“Y”
Rajesh Chamarthi感谢您的回复,您的代码也不起作用,但帮助我找到了我的小弟弟。新值和之前缺少的冒号
IF NEW.Pay_done==('y'||'Y')THEN
changed for
IF NEW.Pay_done=('y'||'Y')THEN
还有工作 为什么这个标签是mysql?@Alex-相反,这似乎是一个答案,特别是对另一个据称不起作用的答案的有效改进。
IF NEW.Pay_done==('y'||'Y')THEN
changed for
IF NEW.Pay_done=('y'||'Y')THEN