Menu

ukládání procedur?

Help
2009-02-07
2013-04-22
  • Petr Kramář

    Petr Kramář - 2009-02-07

    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ů.

     
    • Jakub Vrána

      Jakub Vrána - 2009-02-16

      Mě to tedy bez problémů funguje (když tedy pominu překlep delmiter). Můžete to zkusit v SVN verzi?

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.