在触发器内循环mysql查询

Posted

技术标签:

【中文标题】在触发器内循环mysql查询【英文标题】:Looping mysql query inside trigger 【发布时间】:2017-02-14 23:40:28 【问题描述】:

这是我的触发器:

DELIMITER |

CREATE TRIGGER update_status_penjualan AFTER UPDATE
    ON penjualan FOR EACH ROW
BEGIN

DECLARE arrayresult = (SELECT * FROM rincian_penjualan WHERE id_penjualan = OLD.id)     

  for ids in arrayresults

      UPDATE buku SET stok = stok + ids['jumlah']; WHERE noisbn = ids['noisbn'];                    

  endfor

END;

|

DELIMITER ;

我有很多错误,我认为是因为我的循环代码不正确。 谁能告诉我如何解决它? 谢谢~

【问题讨论】:

有什么错误?如果我们不知道问题出在哪里,我们将无能为力。请编辑您的问题以添加详细信息。 【参考方案1】:

您可以尝试使用cursor,如下所示:

DELIMITER |

CREATE TRIGGER update_status_penjualan AFTER UPDATE
    ON penjualan FOR EACH ROW
BEGIN

declare jumlah_c int;
declare noisbn_c int;
declare done int;
declare cur1 cursor for 
SELECT * FROM rincian_penjualan WHERE id_penjualan = OLD.id;
declare continue handler for not found set done=1;

    set done = 0;
    open cur1;
    igmLoop: loop   
    fetch cur1 into jumlah_c,noisbn_c;
     if done = 1 then leave igmLoop; end if;

      UPDATE buku SET stok = stok + jumlah_c WHERE noisbn = noisbn_c;                    

    end loop igmLoop;
    close cur1;

END;

|

DELIMITER ;

【讨论】:

声明 jumlah_c int;声明 noisbn_c 整数;这会自动引用 buku 表中的 colum jumlah 和 noisbn 吗? 是的,它们对应select的每一行(fetch cur1 into jumlah_c,noisbn_c),我把它们声明为int,对吗?

以上是关于在触发器内循环mysql查询的主要内容,如果未能解决你的问题,请参考以下文章

带有MySql PDO的while循环内的while循环

MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

Mysql 临时表 视图

MySQL的游标和触发器

循环更新查询 pdo where id

MySQL视图存储过程触发器