За последние 24 часа нас посетили 19288 программистов и 1617 роботов. Сейчас ищут 1113 программистов ...

Хранимые процедуры

Тема в разделе "MySQL", создана пользователем Padaboo, 9 мар 2010.

  1. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Пытаюсь воспроизвести работу этого куска кода в хранимой процедуре:
    PHP:
    1. <?
    2. $query="SELECT * from `worker` WHERE spec='".$serch."' ";
    3. if($_GET['money']!=''){ $money=Neutralize($_GET['money']); $query.="AND money='".$money."' "; }
    4. if($_GET['city']!=''){ $city=Neutralize($_GET['city']); $query.="AND city='".$city."' "; }
    5. $query.=" LIMIT ".$pager.",".$finish;
    6. ?>
    Что наваял:
    [sql]CREATE PROCEDURE `Job`(IN Serch VARCHAR(22) IN Pager INT IN Finish INT IN Money INT(50) IN City VARCHAR(22))
    BEGIN
    SELECT * FROM `worker` WHERE spec=Serch AND money=Money AND city=City LIMIT Pager,Finish;
    END[/sql]
    Создать процедуру пытаюсь в phpmyadmin выбрав нужную базу данных, выдает ошибку:
    #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 'IN Pager INT IN Finish INT IN Money INT(50) IN City VARCHAR(22))
    BEGIN
    SELEC' at line 1
    подскажите пожалуйста как правильно создать процедуру и как реализовать что то типа isset т.е. если переменная задана использовать 1 запрос, а если нет то другой , как в php скрипте выше
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    IN, IN, IN
    IFNULL
     
  3. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    #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 '[sql]Pager INT Finish INT Money INT(50) City VARCHAR(22))
    BEGIN
    SELECT * FROM `wo[/sql]' at line 1
    оставил 1 IN вначале...
     
  4. запятые
     
  5. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    теперь ругается на [sql]LIMIT Pager,Finish[/sql]

    [sql]CREATE PROCEDURE `Job`(IN Serch VARCHAR(22),IN Pager INT(20),IN Finish INT(20),IN Money INT(50),IN City VARCHAR(22))
    BEGIN
    SELECT * FROM `worker` WHERE spec=Serch AND money=Money AND city=City LIMIT Pager,Finish;
    END[/sql]
     
  6. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Padaboo
    check the manual that corresponds to your MySQL server version for the right syntax to use
     
  7. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Костян
    тут же работает...
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Padaboo
    RTFM блин...
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    на самом деле, там все не настолько однозначно. можно использовать подготовленные выражения или пользовательскіе переменные.
     
  10. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Костян
    не нашел ни 1 мануала по хранимым процедурам, где бы LIMIT задавался переменной
    только если DECLARE, а у меня она все время разная будет
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  12. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Luge
    в гугле с кнопкой "на русском" )
     
  13. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Padaboo
    с кнопкой "на русском" ты будешь всю жизнь искать
     
  14. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Ну почему же всю жизнь, главное уметь искать.
    http://www.sql.ru/forum/actualthread.aspx?tid=287126#2630694
     
  15. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Goryn
    спасибо, оказывается не все так просто было)
    [sql]CREATE PROCEDURE `rd_userlog`(IN _START INTEGER, IN _LIMIT INTEGER)
    begin

    PREPARE STMT FROM
    "SELECT * FROM `userlog`
    ORDER BY
    `userlog`.`UserlogID` DESC limit ?,?";
    SET @START = _START;
    SET @LIMIT = _LIMIT;
    EXECUTE STMT USING @START, @LIMIT;

    end[/sql]