在触发器内循环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查询的主要内容,如果未能解决你的问题,请参考以下文章