create trigger amountlog_update_recalculated before update on dm_amountlog for each row
BEGIN
SET @cur=curdate();
set NEW.actualyear=year(@cur);
set NEW.actualmonth=month(@cur);
set NEW.actualday=day(@cur);
SET @suma=dm_amount.paid+NEW.actualpayment;
update dm_amount set dm_amount.paid=@suma where dm_amount.docid=NEW.docid;
END;
这个触发器更新的时候为什么提示找不到表“dm_amount”,但这张表确实是存在的,而且也没有错误还有下面一个触发器,为什么总提示出错,上面的触发器是是因为下面这个触发器问题解决不了所以拆出来的
create trigger amountlog_update_recalculated before update on dm_amountlog for each row
BEGIN
SET @cur=curdate();
set NEW.actualyear=year(@cur);
set NEW.actualmonth=month(@cur);
set NEW.actualday=day(@cur);
SET @suma=select sum(dm_amountlog.actualpayment) from dm_amountlog where dm_amountlog.docid=NEW.docid;
update dm_amount set dm_amount.paid=@suma where dm_amount.docid=NEW.docid;
IF dm_amount.paid=dm_amount.payment where dm_amount.docid=NEW.docid THEN
update dm_amount SET dm_amount.isdone=1 where dm_amount.docid=NEW.docid;
END IF;
END;
$$望大侠指教
BEGIN
SET @cur=curdate();
set NEW.actualyear=year(@cur);
set NEW.actualmonth=month(@cur);
set NEW.actualday=day(@cur);
SET @suma=dm_amount.paid+NEW.actualpayment;
update dm_amount set dm_amount.paid=@suma where dm_amount.docid=NEW.docid;
END;
这个触发器更新的时候为什么提示找不到表“dm_amount”,但这张表确实是存在的,而且也没有错误还有下面一个触发器,为什么总提示出错,上面的触发器是是因为下面这个触发器问题解决不了所以拆出来的
create trigger amountlog_update_recalculated before update on dm_amountlog for each row
BEGIN
SET @cur=curdate();
set NEW.actualyear=year(@cur);
set NEW.actualmonth=month(@cur);
set NEW.actualday=day(@cur);
SET @suma=select sum(dm_amountlog.actualpayment) from dm_amountlog where dm_amountlog.docid=NEW.docid;
update dm_amount set dm_amount.paid=@suma where dm_amount.docid=NEW.docid;
IF dm_amount.paid=dm_amount.payment where dm_amount.docid=NEW.docid THEN
update dm_amount SET dm_amount.isdone=1 where dm_amount.docid=NEW.docid;
END IF;
END;
$$望大侠指教
这句 SET @suma=dm_amount.paid+NEW.actualpayment;是什么意思?期望MYSQL做什么?dm_amount.paid代表什么?这个表中只有一条记录? 如果多条记录那这个dm_amount.paid等于多少?
SET @suma=dm_amount.paid+NEW.actualpayment; 是用dm_amount的实际支付总量paid加上这期已支付的金额actualpayment
错误信息是 :ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'selec
t sum(dm_amountlog.actualpayment) from dm_amountlog where dm_amountlog.doci' at
line 7
CREATE TRIGGER amountlog_update_recalculated BEFORE UPDATE ON dm_amountlog
FOR EACH ROW
BEGIN
SET @cur=CURDATE();
SET NEW.actualyear=YEAR(@cur);
SET NEW.actualmonth=MONTH(@cur);
SET NEW.actualday=DAY(@cur);
SET @suma=(SELECT SUM(dm_amountlog.actualpayment) FROM dm_amountlog WHERE dm_amountlog.docid=NEW.docid);
UPDATE dm_amount SET dm_amount.paid=@suma WHERE dm_amount.docid=NEW.docid;
IF dm_amount.paid=dm_amount.payment AND dm_amount.docid=NEW.docid THEN
UPDATE dm_amount SET dm_amount.isdone=1 WHERE dm_amount.docid=NEW.docid;
END IF;
END;$$
DELIMITER ;
dm_amount表中paid是实际支付金额的总量, 是期望更新dm_amountlog表中的actualpayment字段的时候,把actualpayment的值和dm_amount表中paid的值相加,得到现在的金额支付总量。
下面是dm_amount和dm_amountlog的关系:
这两个表是通过字段docid来关联的,dm_amountlog是一个资金记录表,有多条docid相同的记录,而在dm_amount中一个docid只对应一条记录。也就是说dm_amount和dm_amountlog是一对多的关系