Prikaz while a kde je chyba – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prikaz while a kde je chyba – MySQL – Fórum – Programujte.comPrikaz while a kde je chyba – MySQL – Fórum – Programujte.com

 

Pavel
~ Anonymní uživatel
383 příspěvků
27. 11. 2008   #1
-
0
-

Ahoj, vím, že tohle je asi dotaz nehodný i pěkný lamy, ale vážně mi to uníká. Pořebuju použít v mysql příkaz while, tak sem si vytvořil na test jednoduchy kod, ovšem nemůžu rozběhat ani ten. Vypadá takhlec:

SET @date = 9;

WHILE @date > 4 DO
SET @date = @date -1;
END WHILE;
SELECT @date;


Řekl bych, že se v tom neda udělat chyba, ale přsto se stalo. Když už sem si nevěděl rady, tak jsem zkusil ukazkovy příklad z dokumentace mysql 5.1, ale stejný výsledek. U nich to vypadá takhle:

CREATE PROCEDURE dowhile()
BEGIN

DECLARE v1 INT DEFAULT 5;

WHILE v1 > 0 DO

SET v1 = v1 - 1;
END WHILE;
END


Sice to mají v procedůře, ale ani s ni ani bez ni to nefachá. Může mi, prosím, někdo prozradit, kde je chyba? Pukod u toho svého kódu vynechám ten While, tak je vše OK a výsledek je 8, ale jinak to prostě končí vždy:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE @date > 4 DO

SET @date = @date -1' at line 1


Tuší někdo?

Nahlásit jako SPAM
IP: 195.47.98.–
KIIV
~ Moderátor
+43
God of flame
28. 11. 2008   #2
-
0
-

nekdo v clanku pod tim zminil ze pry je dobre umistit to co je ve while do BEGIN ... END
tezko rict jestli to pomuze

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Pavel
~ Anonymní uživatel
383 příspěvků
28. 11. 2008   #3
-
0
-

Tak bohuzel, begin end taky nepomohly. :smile11: nejak metusim proc. Ale je to dost sileny ze ani example z dokumentace neni funkcni.

Nahlásit jako SPAM
IP: 84.244.81.–
Prog.0
Věrný člen
29. 11. 2008   #4
-
0
-

To Pavel :

pozri sa na ten kód takto:

CREATE PROCEDURE dowhile() 

BEGIN
DECLARE v1 INT DEFAULT 5;

WHILE v1 > 0 DO
SET v1 = v1 - 1;
END WHILE;
END
MySQL spracuje iba časť, po prvý "oddeľovač príkazov" - bodkočiarku. Ďalej bude vidieť príkaz WHILE ktorý je povolený iba v stored routins, čo spôsobí chybu..

Preto treba v mysql prestaviť "oddelovač príkazov" (delimiter) tak, aby sa kód spracoval až po slovo END aby sa bodkočiarky nechápali ako oddeľovače, ale ako súčasť kódu procedúry:

DELIMITER $$

CREATE PROCEDURE dowhile()
BEGIN
DECLARE v1 INT DEFAULT 5;
WHILE v1 > 0 DO
SET v1 = v1 - 1;
END WHILE;
END$$
DELIMITER ;

..teraz sa za oddelovač príkazov použije $$, čiže príkaz CREATE PROCEDURE sa vykoná celý. Nakoniec je treba nastaviť delimiter naspäť na bodkočiarku.

EDIT: Je to popísané v dokumentácii pri: CREATE PROCEDURE http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html a myslim že je logicke že sa to už nespomina pri každom príklade...

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Kde je chyba??? — založil Mau

Kde je chyba ? — založil sipeer

Kde ej chyba — založil Tom@sQo

C# kde je chyba ? — založil Milan

Kde je chyba? — založil Tom@sQo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý