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;
$$望大侠指教

解决方案 »

  1.   


    这句    SET @suma=dm_amount.paid+NEW.actualpayment;是什么意思?期望MYSQL做什么?dm_amount.paid代表什么?这个表中只有一条记录? 如果多条记录那这个dm_amount.paid等于多少?
      

  2.   


    SET @suma=dm_amount.paid+NEW.actualpayment; 是用dm_amount的实际支付总量paid加上这期已支付的金额actualpayment
      

  3.   


    错误信息是 :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
      

  4.   

    DELIMITER $$
    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 ;
      

  5.   


    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是一对多的关系
      

  6.   

    这个触发器建立没有出错,但是在更新dm_amountlog的时候,出现我拆分的那个触发器一样的错误,提示“dm_amount”表不存在