Ich arbeite an einer Prozedur, die meine Artikel verkauft. Wenn ich versuche, es anzurufen, sagt es mir diese Fehlermeldung. Ich überprüfte, welcher Teil mehr Zeilen zurückgibt, aber ich konnte es nicht herausfinden. Hier ist der Code für dieses Verfahren:Fehler 1242: Unterabfrage gibt mehr als 1 Zeile zurück - warum?
DELIMITER //
CREATE PROCEDURE SellItem(pCharacterName varchar(50), pItemName varchar(50), howManyItems int(11))
BEGIN
DECLARE pchar int(11);
DECLARE pitem int(11);
DECLARE pitemCost int(11);
DECLARE pcharMoney int(11);
DECLARE newMoneyValue int(11);
DECLARE cnt int(11) DEFAULT 1;
DECLARE pcharitid int(11);
SET pchar=(SELECT `getChar`(`pCharacterName`));
SET pitem=(SELECT `getItem`(`pItemName`));
SET pitemCost=(SELECT `price` FROM `item` WHERE `item`.`item_id`=pitem);
SET pcharMoney=(SELECT `money` FROM `character` WHERE `character`.`character_id`=pchar);
SET newMoneyValue=pcharMoney;
WHILE cnt<=`howManyItems` DO
SET newMoneyValue=newMoneyValue+pitemCost;
SET cnt=cnt+1;
END WHILE;
SET cnt=1;
WHILE cnt<=`howManyItems` DO
SET pcharitid=(SELECT MAX(`character_item_id`) FROM `character_item` WHERE `character_item`.`character_id`=pchar AND `character_item`.`item_id`=pitem);
IF (SELECT `item_id` FROM `character_item` WHERE `character_item`.`item_id` IN(SELECT `item_id` FROM `item` WHERE `item`.`name`=`pItemName`)) THEN
DELETE FROM `character_item` WHERE `character_item`.`character_item_id`=pcharitid;
UPDATE `character` SET `money`=newMoneyValue WHERE `character`.`character_id`=pchar;
SET cnt=cnt+1;
END IF;
END WHILE;
END; //
DELIMITER ;
Die Funktionen Ich nenne sind einfache Funktionen, die mir die ID des ausgewählten Zeichens/Stück zurückzukehren.
Die Fehlermeldung konnte nicht klarer sein. Ihre Auswahl gibt mehr als eine Zeile zurück. – Eric
Danke für das, was ich schon wusste. – Daelendil
Wenn Sie bereits wissen, was nicht stimmt, führen Sie die individuelle SELECT-Anweisung aus, um herauszufinden, welche Ihnen mehr als 1 Zeile geben. – Eric