Mysql if语句上出现语法错误的触发器

Mysql if语句上出现语法错误的触发器,mysql,if-statement,triggers,Mysql,If Statement,Triggers,由于语法错误,Mysql不允许我创建下面的触发器,我想按照我编写if语句的方式,有人能帮助我实现这一点吗 DELIMITTER $$ CREATE TRIGGER gl_bal_upd_update AFTER UPDATE ON journal_line FOR EACH ROW BEGIN DECLARE curr varchar(10); DECLARE period varchar(10); select period_name,currency into period,curr

由于语法错误,Mysql不允许我创建下面的触发器,我想按照我编写if语句的方式,有人能帮助我实现这一点吗

DELIMITTER $$
CREATE TRIGGER gl_bal_upd_update AFTER UPDATE ON journal_line
FOR EACH ROW
BEGIN
DECLARE curr varchar(10); 
DECLARE period varchar(10);

select period_name,currency 
into period,curr
from journal_header jh
where jh.journal_header_id = NEW.journal_header_id;   

INSERT IGNORE INTO general_ledger_balance (account_comb_id,period_name)values(NEW.account_comb_id,period);

UPDATE general_ledger_balance glb
SET glb.debit = IF(NEW.debit + glb.debit - OLD.debit - NEW.credit - glb.credit + OLD.credit > 0, NEW.debit + glb.debit - OLD.debit - NEW.credit - glb.credit + OLD.credit,0)(
,glb.credit = IF(NEW.credit + glb.credit - OLD.credit -NEW.debit - glb.debit + OLD.debit > 0, NEW.credit + glb.credit - OLD.credit - NEW.debit - glb.debit + OLD.debit,0)
,glb.currency = curr
WHERE glb.account_comb_id = NEW.account_comb_id
AND glb.period_name = period; 

END $$

DELIMITER ; 

分隔符拼写错误,在行尾随机加上一个左括号。试试这个,它会通过语法错误得到:

DELIMITER $$
CREATE TRIGGER gl_bal_upd_update AFTER UPDATE ON journal_line
FOR EACH ROW
BEGIN
DECLARE curr varchar(10); 
DECLARE period varchar(10);

select period_name,currency 
into period,curr
from journal_header jh
where jh.journal_header_id = NEW.journal_header_id;   

INSERT IGNORE INTO general_ledger_balance (account_comb_id,period_name)values(NEW.account_comb_id,period);

UPDATE general_ledger_balance glb
SET glb.debit = IF(NEW.debit + glb.debit - OLD.debit - NEW.credit - glb.credit + OLD.credit > 0, NEW.debit + glb.debit - OLD.debit - NEW.credit - glb.credit + OLD.credit,0)
,glb.credit = IF(NEW.credit + glb.credit - OLD.credit -NEW.debit - glb.debit + OLD.debit > 0, NEW.credit + glb.credit - OLD.credit - NEW.debit - glb.debit + OLD.debit,0)
,glb.currency = curr
WHERE glb.account_comb_id = NEW.account_comb_id
AND glb.period_name = period; 

END $$
DELIMITER ;

分隔符拼写错误,在行尾随机加上一个左括号。试试这个,它会通过语法错误得到:

DELIMITER $$
CREATE TRIGGER gl_bal_upd_update AFTER UPDATE ON journal_line
FOR EACH ROW
BEGIN
DECLARE curr varchar(10); 
DECLARE period varchar(10);

select period_name,currency 
into period,curr
from journal_header jh
where jh.journal_header_id = NEW.journal_header_id;   

INSERT IGNORE INTO general_ledger_balance (account_comb_id,period_name)values(NEW.account_comb_id,period);

UPDATE general_ledger_balance glb
SET glb.debit = IF(NEW.debit + glb.debit - OLD.debit - NEW.credit - glb.credit + OLD.credit > 0, NEW.debit + glb.debit - OLD.debit - NEW.credit - glb.credit + OLD.credit,0)
,glb.credit = IF(NEW.credit + glb.credit - OLD.credit -NEW.debit - glb.debit + OLD.debit > 0, NEW.credit + glb.credit - OLD.credit - NEW.debit - glb.debit + OLD.debit,0)
,glb.currency = curr
WHERE glb.account_comb_id = NEW.account_comb_id
AND glb.period_name = period; 

END $$
DELIMITER ;

嗨,谢谢。虽然设置的借方和贷方不起作用,但这在语法上是正确的。为我或其他人做一个SQLFIDLE,或打开一个新问题嗨,实际上认为它起作用了,更新没有更改借方或贷方,但这是正确的,因为没有要保存的更改!再次谢谢。嗨,谢谢。虽然设置的借方和贷方不起作用,但这在语法上是正确的。为我或其他人做一个SQLFIDLE,或打开一个新问题嗨,实际上认为它起作用了,更新没有更改借方或贷方,但这是正确的,因为没有要保存的更改!再次感谢。