Autor Zpráva
Kuba5
Profil
Ahoj,
chci do tabulky vložit čísla v řadě třeba od 2100 do 2199, ale nechci je psát po jednom, nedá se SQL příkazem nějak jednodušše zapsat od xxxxx do xxxxx? DÍky moc.
Alphard
Profil
Ne, ale lze použít while.
Kuba5
Profil
Alphard:
Díky.
Zkusil jsem tedy:

CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 6100;

  WHILE v1 < 6177 DO
    INSERT INTO domestic (numbers) VALUES (v1); 
    SET v1 = v1 - 1;
  END WHILE;
END;

Co je špatně?
Kuba5
Profil
Ještě jsem zkoušel různé kódy, ale nic mi nefunguje, všude syntax error.
Kajman
Profil
Kuba5:
Co je špatně?

To řekněte Vy, co to píše za chybovou hlášku. Třeba jste zapomněl změnit delimiter, třeba jste proceduru zapomněl zavolat. Těžko říct.
Kuba5
Profil
Kajman:
Omlouvám se, zapomněl jsem vložit sem chybu.

Chyba

SQL-dotaz:

CREATE PROCEDURE dowhile( ) BEGIN DECLARE v1 INT DEFAULT 6100;

MySQL hlásí: Dokumentace
#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 '' at line 3
Tori
Profil
Kuba5:
Musíte dočasně (= po dobu definice procedury) změnit oddělovač SQL příkazů na něco jiného. http://dev.mysql.com/doc/refman/5.0/en/stored-programs-defining.html
Kuba5
Profil
Tori:
D


Tori:
Díky za radu. Stále mi to ale nefunguje. Problém je s tím, že jsem se s tímto nikdy nesetkal a vůbec nevím jestli píšu do SQL příkazu správné věci.
Musím použít delimiter?
Zkusil jsem změnit oddělovače, ale pořád stejná chyba.


Tak změna. Objevil jsem kód, který vypadá funkčně a vytvoří se aspoň procedura. Potom už jen zavolat.

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


Tak.. funkční varianta:

DELIMITER ;;
CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 6100;
  WHILE v1 < 6177 DO
    INSERT INTO domestic (numbers) VALUES (v1);
    SET v1 = v1 + 1;
  END WHILE;
END;;
DELIMITER ;

a následně:

CALL dowhile();
Kcko
Profil
Kuba5:
Když budeš ještě o trošku chytřejší , tak si ji upravíš tak, abys nemusel neustále měnit čísla přímo uvnitř procedury ale pomocí parametrů...

takto nějak

CREATE PROCEDURE `dowhile`(IN `numberFrom` INT, IN `numberTo` INT)
    
BEGIN

  WHILE numberFrom < numberTo DO
    INSERT INTO table(id) VALUES (numberFrom);
    SET numberFrom = numberFrom + 1;
  END WHILE;
END
Kuba5
Profil
Díky, ale teď mám ještě jeden problém.
Mám v té tabulce sloupce s typem INT, ale teď potřebuju INSERT čísel jako 0050, 0051 atd. jak to lze udělat, aby to zobrazovalo i nuly? Teď mi to ukazuje jen 50, 51 atd. bez nul. DÍky.
Kajman
Profil
Ten sloupec si nastavte jako
INT(4) ZEROFILL
Kuba5
Profil
Kajman:
Děkuji

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0