Ahojte!
Potrebujem poradit ohladom vytvarania ulozenych procedur v phpMyAdmin.
Jednoduche procedury ako napriklad:
create procedure moja_storka() select now();
v pohode idu. Ja vsak samozrejme potrebujem zlozitejsiu proceduru skladajucu sa z niekolkych prikazov.
create procedure moja_storka()
begin
prikaz1;
prikaz2;
...
end
Tu vsak uz vznika problem s parserom. Problemova je podkociarka na konci prikazov, ktora sa riesi zmenou oddelovaca prikazom DELIMITER.
A teda ked si chcem ulozit moju proceduru, pouzijem
DELIMITER $$
create procedure moja_storka()
begin
prikaz1;
prikaz2;
...
end $$
DELIMITER ;
Ale vyzera to tak, akokeby som nemal prava na zmenu oddelovaca.
sql hlasi:
#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 'DELIMITER $$
CREATE PROCEDURE moja_storka()
BEGIN
END' at line 1
BTW: Na localhoste mam mysql-server, kde som svoju stranku vyvijal. A tam vsetko funguje bez problemov. I ked je to MySQL verzie 5, na strankach mysql som sa docital, ze aj v stvorke je implementovana podpora storiek.
Ako teda nahrat zlozitejsiu storku?
Je tohle vůbec v MySQL4 podporováno?
Tom: tady uz je mysql5 :)
marcel: kdyz mu vadi prikaz DELIMITER tak ho nepouzivej ne?
navic DELIMITER neni ani v refmanu pro mysql5, tak nevim kde si ho vzal
Mike: Dobre, tak ako je mozne bez prikazu DELIMITER vlozit storku do db? Ak ju napises bez tohto prikazu, tak parser tomu nebude rozumiet. Len si skus jednoduchy priklad:
CREATE PROCEDURE moja_storka()
BEGIN
UPDATE moja_tabulka WHERE 1=0;
SELECT * from moja_tabulka;
END;
Parser vyhlasi syntax error.
1) precti si CO za chybu ti to vyhodi (chyba neni pri vytvareni procedury, ale v tom kodu)
- co to ma bejt za query, to UPDATE tab WHERE 1=0 ?
Nie, nie, Mike, ver mi, kod sql je syntakticky aj semanticky spravne.
Vlozenie procedur, kde nie je BEGIN-END blok a skladaju sa len z jedneho prikazu, funguje bez problemov.
Problem nastava pri procedurach, ktore maju 2 a viac prikazov. Parser vzdy vypise syntax error 1064, ktory som popisal v prvom prispevku.
tak jeste jednou
otevri si PMA, vyber db, klikni nahore na SQL a do pole napis ten tvuj SQL dotaz (UPDATE moje_tabulka WHERE 1=0). pak klikni Go, at se prikaz vykona.
zapni mozek, kdyby to bylo spravne, tak SQL server nebude hlasit syntax error presne v tom miste kde je ta podminka WHERE 1=0 ne?
spravna syntaxe pro update je
UPDATE tabulka SET sloupecek=nejakyvyraz [WHERE podminka]
WHERE podminka je nepovinny, byt tam nemusi
ale SET sloupecek tam byt MUSI
Jasne, uniklo mi to slovicko SET. Na tom ale nezalezi, ten priklad, ktory som napisal, bol len ilustracny. Skus si, prosim ta, vo svojom PMA vytvorit lubovolnu storku pozostavajucu z aspon dvoch prikazov. Podla mna ti to nepojde.
tak to se mylis. dotazu si tam muzu dat klidne 20 a jede to bez problemu
ja to aj tak stale neviem nejako rozbehat. skusil som napriklad:
create procedure moja_storka()
begin
update tab1 set id=1 where id>1000;
delete from tab1 where id>1000;
end;
a opat to dopadlo tak, ako predtym - syntax chybou:
#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 'update content_main set id=1 where id > 1000' at line 3