Hallo,
Ich versuche seit Stunden Mysql 5.0.41 eine Stored Procedure beizubringen. Aber ich kriege immer folgenden Fehler:
ERROR 1327 (42000): Undeclared variable: gbb
Ich habe herausgefunden, das es die erste Select Anweissung(Zeile 13) betrifft. So sieht die Sql Anweisung aus:
delimiter //
CREATE PROCEDURE setzePunkte (IN userid INT, IN neueGbPunkte INT, IN neueForsPunkte INT)
BEGIN
DECLARE punkte_alt INT;
DECLARE gbalt INT;
DECLARE forsalt INT;
DECLARE neu_platz INT;
DECLARE gesamt1 INT;
START TRANSACTION;
SELECT `gesamtt` INTO punkte_alt, `gbb` INTO gbalt, `fors` INTO forsalt FROM `highscore` WHERE `user_id` = userid;
SET gbalt=gbalt+neueGbPunkte, forsalt=forsalt+neueForsPunkte;
SET gesamt1=gbalt+forsalt;
SELECT '1' AS `nichts` FROM `highscore` WHERE `gesamtt` >= punkte_alt AND `gesamtt` <= gesamt1 FOR UPDATE;
SELECT min(platz) AS `temp` INTO neu_platz FROM `highscore` WHERE `gesamtt` >= punkte_alt AND `gesamtt` <= gesamt1;
UPDATE `highscore` SET `platz` = (platz+1) WHERE `gesamtt` >= punkte_alt AND `gesamtt` <= gesamt1;
UPDATE `highscore` SET `platz` = neu_platz, `gesamtt` = gesamt1, `gbb` = gbalt, `fors` = forsalt WHERE `user_id` = userid;
COMMIT;
END;
//
delimiter ;
Das delimiter ist wegen der Konsole, ich führe das Sql in der Eingabeaufforderung aus.
Und die Tabelle:
CREATE TABLE `highscore` (
`user_id` int(11) NOT NULL default '0',
`platz` int(11) NOT NULL,
`gesamtt` int(11) NOT NULL,
`gbb` int(11) NOT NULL,
`fors` int(11) NOT NULL,
KEY `platz` (`platz`,`gesamtt`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Hat jemand eine Idee, was falsch sein könnte? Wäre möglich, das es ein Mysql Bug ist?
mfg Roland
PS: Die Stored Procedure soll die Highscore eines Users Updaten, inklusive ändern aller nötigen Plätze
[MYSQL 5] Stored Procedure Error
gepostet vor 17 Jahre, 5 Monate von planetenkiller
gepostet vor 17 Jahre, 5 Monate von AngelFilia
Nach dem, was ich im mysql-Handbuch gesehen habe sollte das Statement eher so aussehen:
SELECT `gesamtt`, `gbb`, `fors` INTO punkte_alt, gbalt, forsalt FROM `highscore` WHERE `user_id` = userid;
Einfach mal probieren - habe mit mysql 5 noch nicht gearbeitet...
SELECT `gesamtt`, `gbb`, `fors` INTO punkte_alt, gbalt, forsalt FROM `highscore` WHERE `user_id` = userid;
Einfach mal probieren - habe mit mysql 5 noch nicht gearbeitet...
gepostet vor 17 Jahre, 5 Monate von planetenkiller
hey, vielen dank, genau daran hat es gelegen. Ich habe eben bis jetzt nur Beispiele gesehen, bei dem nur einmal INTO benutzt wurde. Daher dachte ich, daran kann es nicht liegen. Aber man lernt ja nie aus.
mfg Planetenkiller
mfg Planetenkiller