Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Базы данных > MySQL
Перезагрузить страницу Cursor для prepare как его создать
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Granite Golem Granite Golem вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.03.2004
По умолчанию Cursor для prepare как его создать - 01.09.2010, 12:29

Не нашёл в мануалах, как такое делается. Имеем: хранимая процедура, которая выполняет некий SELECT с опцией LIMIT, причём, как известно, этот LIMIT требует только число, а на переменную ругается. Тогда как мне нужно именно вставить ограничение, переданное в параметре процедуры. И после этого пройтись по всему выбранному списку курсором. Вот примерный код того, что мне нужно:

Код:
CREATE PROCEDURE limitselect(limnum INT)
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a INT;

--  вариант 1, который не работает
--  DECLARE cur1 CURSOR FOR SELECT i FROM test LIMIT limnum;

-- вариант 2, который непонятно как оформить
-- SELECT @request = CONCAT("SELECT i FROM test LIMIT ', limnum);
-- PREPARE reqstatement FROM @request;
-- DECLARE cur1 CURSOR FOR EXECUTE reqstatement;

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur1;

  REPEAT
    FETCH cur1 INTO a;
    IF NOT done THEN

-- тут операции с выбранным значением

    END IF;
  UNTIL done END REPEAT;

  CLOSE cur1;
END
К тому же этот DECLARE CURSOR нужно объявлять в самом начале процедуры, до каких-либо SELECT или даже PREPARE. Как тут быть? Возможно вообще сделать то, что я хочу (именно этими средствами)? Или нужно отказываться от курсоров?
Ответить с цитированием
  (#2 (permalink)) Старый
Granite Golem Granite Golem вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.03.2004
По умолчанию 21.09.2010, 17:47

Всем спасибо за участие, проблема решается через временную таблицу, вот тестовый код:

Код:
CREATE PROCEDURE testcursor(startid int, amt int)
BEGIN
    declare done int default 0;
    declare a int default 0;
    declare cur1 cursor for select idr from tmpstore;
    declare continue handler for not found set done = 1;

    drop table if exists tmpstore;
    create temporary table tmpstore (id int not null auto_increment,
                        idr int null default 0, primary key (id));

    set @testrequest = concat('insert into tmpstore (idr) select id from randval where id>=', startid, ' order by id limit ', amt);
    prepare tempupdate from @testrequest;
    execute tempupdate;
    open cur1;
    repeat
        fetch cur1 into a;
        if NOT done then
            update randval set sqrt=floor(sqrt), rval=floor(sqrt)*floor(sqrt) where id=a;
        end if;
    until done end repeat;
    close cur1;
    drop table if exists tmpstore;
END
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UML диаграмма как ее создать malenka Вопросы начинающих программистов 1 11.06.2011 23:24
Как создать в интерфейсе кнопку "Создать проект" в Visual Basic2010 imported_Fred_ Вопросы начинающих программистов 0 11.03.2011 17:50
Как создать VBSскрипт на С++ kodFes Вопросы начинающих программистов 2 11.02.2011 11:50
Не устанавливается Cursor FX KoIIIkaBest Windows Vista 4 26.11.2010 02:19
T9 для ПК как создать Кошмар Некоммерческие проекты 17 05.04.2009 15:00
При загрузке компьютера раздается писк и появляется сообщение: Prepare to Enter setup LeshIg Любые вопросы от новичков 4 04.11.2008 16:25
Как создать чат Дева Сетевое программирование 6 19.01.2007 01:39
Как создать Application chizhan Visual C++ 5 02.06.2006 07:04
Чем и как создать на PC pdb AsMan PalmOS 9 29.11.2005 16:18
Как подключить cursor не используя файл ресурсов, а взять готовый Дохлый C++ Builder 1 19.07.2005 13:45
Как создать таймер Monah IRH DHTML, JavaScript, VBScript 2 11.03.2005 20:10
Как создать портал Алексеев Николай Зацените! 0 03.01.2005 21:50



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов