我试图编写一个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
答案 0 :(得分:0)
因为你的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
我确信可以有一个更优雅的解决方案,但正如我所说,我无法理解你的概念。以上修正只是为了摆脱&#34;结果由多行组成&#34;错误。试一试!