Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在触发器内循环mysql查询_Mysql_Sql_Triggers - Fatal编程技术网

在触发器内循环mysql查询

在触发器内循环mysql查询,mysql,sql,triggers,Mysql,Sql,Triggers,这是我的扳机: 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 s

这是我的扳机:

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 ;
我有很多错误,我想是因为我的循环代码不对。 有人能告诉我怎么修吗?
谢谢~

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

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 ;

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

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 ;

错误是什么?如果我们不知道问题出在哪里,我们就帮不了忙。请编辑您的问题以添加详细信息。有哪些错误?如果我们不知道问题出在哪里,我们就帮不了忙。请编辑您的问题以添加详细信息;声明noisbn_c int;这是否自动引用了buku表中的ColumJumlah和noisbn?是的,它们对应于select的每一行(
fetch cur1 into jumlah_c,noisbn_c
),我将它们声明为int,对吗?声明jumlah_c int;声明noisbn_c int;这是否自动引用了buku表中的ColumJumlah和noisbn?是的,它们对应于select的每一行(
fetch cur1 into jumlah_c,noisbn_c
),我声明它们为int,对吗?