Zde se nejedná o chybu, ale za zmínku to možná stojí, protože ne všichni když píší proceduru tak názvy procedur, parametrů, sloupců, tabulek dávají mezi apostrofy což se mi stalo osudným když jsem ukládal do PHPMinAdmina proceduru a potřebné věci v apostrofech nebyly. Uvedu na jednoduchém příkladu výběru podle ID: (této události nastáva pouze ukládate-li proceduru pomoci "SQL příkaz".)
delmiter ^^
CREATE PROCEDURE SELECT_BY_ID (IN P_id int)
BEGIN
SELECT id, email FROM table WHERE id = P_id;
END ^^
delmiter ;
tak procedura se uložila dobře, ale spustit správně ji lze pouze přes "SQL příkaz"
call SELECT_BY_ID(1);
například, ale nelze ji použít přes rozhraní v PHPMinAdminu, ten si parametru "P_id" ani nevšimne, také nestačí uvozovat pouze název procedury a názvy parametrů
delmiter ^^
CREATE PROCEDURE `SELECT_BY_ID` (IN `P_id` int)
BEGIN
SELECT id, email FROM table WHERE id = P_id;
END ^^
delmiter ;
skončí naprosto stejným výsledkem, čili zřejmě jediné správné řešení je:
delmiter ^^
CREATE PROCEDURE `SELECT_BY_ID` (IN `P_id` int)
BEGIN
SELECT `id`, `email` FROM `table` WHERE `id` = P_id;
END ^^
delmiter ;
poté je vše bez problémů. Na konec bych ještě uvedl, že toto se stává pouze jen když v parametrech procedury jsou pouze integery, takže například:
delimiter ^^
CREATE PROCEDURE SELECT_BY_ID_EMAIL (IN P_id int, IN P_email varchar(60))
BEGIN
SELECT id, email FROM table WHERE id = P_id AND email = P_email;
END ^^
delimiter ;
funguje bez problémů.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Zde se nejedná o chybu, ale za zmínku to možná stojí, protože ne všichni když píší proceduru tak názvy procedur, parametrů, sloupců, tabulek dávají mezi apostrofy což se mi stalo osudným když jsem ukládal do PHPMinAdmina proceduru a potřebné věci v apostrofech nebyly. Uvedu na jednoduchém příkladu výběru podle ID: (této události nastáva pouze ukládate-li proceduru pomoci "SQL příkaz".)
delmiter ^^
CREATE PROCEDURE SELECT_BY_ID (IN P_id int)
BEGIN
SELECT id, email FROM table WHERE id = P_id;
END ^^
delmiter ;
tak procedura se uložila dobře, ale spustit správně ji lze pouze přes "SQL příkaz"
call SELECT_BY_ID(1);
například, ale nelze ji použít přes rozhraní v PHPMinAdminu, ten si parametru "P_id" ani nevšimne, také nestačí uvozovat pouze název procedury a názvy parametrů
delmiter ^^
CREATE PROCEDURE `SELECT_BY_ID` (IN `P_id` int)
BEGIN
SELECT id, email FROM table WHERE id = P_id;
END ^^
delmiter ;
skončí naprosto stejným výsledkem, čili zřejmě jediné správné řešení je:
delmiter ^^
CREATE PROCEDURE `SELECT_BY_ID` (IN `P_id` int)
BEGIN
SELECT `id`, `email` FROM `table` WHERE `id` = P_id;
END ^^
delmiter ;
poté je vše bez problémů. Na konec bych ještě uvedl, že toto se stává pouze jen když v parametrech procedury jsou pouze integery, takže například:
delimiter ^^
CREATE PROCEDURE SELECT_BY_ID_EMAIL (IN P_id int, IN P_email varchar(60))
BEGIN
SELECT id, email FROM table WHERE id = P_id AND email = P_email;
END ^^
delimiter ;
funguje bez problémů.
Mě to tedy bez problémů funguje (když tedy pominu překlep delmiter). Můžete to zkusit v SVN verzi?