gpt4 book ai didi

MySQL存储过程,错误: Result consisted of more than one row

转载 作者:行者123 更新时间:2023-11-29 22:35:52 39 4
gpt4 key购买 nike

我正在尝试编写 MySQL 存储过程,但遇到一些问题。当我尝试执行它时,出现错误 1172:结果由多行组成。我不知道我做错了什么。

这是我的代码:

CREATE PROCEDURE bepaal_lijst_van_bij_te_bestellen_artikelen()
BEGIN
DECLARE varArtikel, varBesteld, varVoorraad, cnt, varVerschil, resultaten INT DEFAULT 0;

DROP TABLE IF EXISTS __besteld_voorraad;
CREATE TEMPORARY TABLE __besteld_voorraad
(artikelid INT, besteld INT, voorraad INT, controle INT) ENGINE = HEAP;

main: BEGIN
-- test if table is empty
SELECT COUNT(*) FROM items INTO cnt;
IF cnt=0 THEN LEAVE main; END IF;

SELECT items.artikel_id AS artikelid, items.aantal AS besteld, artikelen.voorraad AS voorraad
FROM items
INNER JOIN artikelen
ON items.artikel_id=artikelen.artikel_id
INTO varArtikel, varBesteld, varVoorraad;

INSERT INTO __besteld_voorraad (artikelid,besteld,voorraad,controle)
VALUES (varArtikel,varBesteld,varVoorraad,varVerschil);

SELECT COUNT(*) FROM __besteld_voorraad INTO resultaten;
SET cnt=1;

-- loop
lus: WHILE cnt<resultaten DO
SELECT artikelid,besteld,voorraad FROM __besteld_voorraad
LIMIT cnt,resultaten
INTO varArtikel, varBesteld, varVoorraad;

IF (varVoorraad - varBesteld <= 0) THEN
SET varVerschil = -1;
ELSE
SET varVerschil = 1;
END IF;

UPDATE __besteld_voorraad
SET controle = varVerschil
WHERE artikelid = varArtikel AND besteld = varBesteld AND voorraad = varVoorraad;

SET cnt = cnt + 1;
END WHILE lus;
END main;

SELECT artikelid, controle FROM __besteld_voorraad ORDER BY artikel_id ASC;
DROP TABLE __besteld_voorraad;
END

最佳答案

这是因为您的 select into 命令返回不止一行。我不明白完整的概念,但我猜你是想在售出后减少数量?

更改这部分

SELECT items.artikel_id AS artikelid, items.aantal AS besteld, artikelen.voorraad AS voorraad
FROM items
INNER JOIN artikelen
ON items.artikel_id=artikelen.artikel_id
INTO varArtikel, varBesteld, varVoorraad;

INSERT INTO __besteld_voorraad (artikelid,besteld,voorraad,controle)
VALUES (varArtikel,varBesteld,varVoorraad,varVerschil);

致:

INSERT INTO __besteld_voorraad (artikelid,besteld,voorraad,controle)
(SELECT
items.artikel_id AS artikelid,
items.aantal AS besteld,
artikelen.voorraad AS voorraad
FROM items INNER JOIN artikelen ON items.artikel_id=artikelen.artikel_id);

这部分:

SELECT artikelid,besteld,voorraad FROM __besteld_voorraad 
LIMIT cnt,resultaten

致:

SELECT artikelid,besteld,voorraad FROM __besteld_voorraad 
LIMIT cnt,1

我确信可能有一个更优雅的解决方案,但正如我所说,我无法理解你的概念。上述更正只是为了消除“结果由多行组成”错误。尝试一下!

关于MySQL存储过程,错误: Result consisted of more than one row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556516/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com