Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LIMIT / 12 сообщений из 12, страница 1 из 1
23.06.2015, 15:30:08
    #38990753
Mor1L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Подскажите пожалуйста. Процедура принимает входной параметр iLimit , этот же параметр нужно указать в LIMIT

DECLARE cursor1 CURSOR FOR ... FROM ... LIMIT iLimit;
Ругается, если писать цифры то все работает хорошо, а с переменной ошибка. Подскажите как можно в данном случае решить проблему, читал за prepared statement, но не знаю как применить относительно курсора в данном случае.
...
Рейтинг: 0 / 0
23.06.2015, 15:43:31
    #38990772
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Хм, похоже, что никак. Я лазейки в синтаксисе не вижу.

prepared statement помогли бы, если нужно просто выполнить запрос, а не делать из него курсор.
...
Рейтинг: 0 / 0
23.06.2015, 15:52:41
    #38990796
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Думаю, придётся делать счётчик и соотв. обвязку FETCH-a. При исчерпании лимита не фетчить, а выдавать соотв. SIGNAL.
...
Рейтинг: 0 / 0
23.06.2015, 15:55:34
    #38990802
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Хотя еще хорошо бы посмотреть на реальную необходимость курсора. С хорошей вероятностью курсор и его цикл получится заменить на SQL-запрос. А там, глядишь, и надобность в LIMIT-е отпадет.
...
Рейтинг: 0 / 0
23.06.2015, 17:15:34
    #38990902
Mor1L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Спасибо что откликнулись. Вот процедура:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE DEFINER=`root`@`localhost` PROCEDURE `statisticAttendancePush`(IN data_part_count SMALLINT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE statist_id INT (11);
DECLARE table_nam varchar(30);
DECLARE old_val  mediumtext;
DECLARE new_val  mediumtext;
DECLARE pag  varchar(250);
DECLARE act varchar(1);
DECLARE dat datetime;


DECLARE cur1 CURSOR FOR SELECT statistics_id, table_name, old_value, new_value, page, action, date_create from practic.log_memory LIMIT data_part_count ;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO statist_id, table_nam, old_val, new_val, pag, act, dat;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO practic.log(statistics_id, table_name, old_value, new_value, page, action, date_create)
VALUES(statist_id, table_nam, old_val, new_val, pag, act, dat);
END LOOP;
CLOSE cur1;



data_part_count - входной параметр процедуры. Суть процедуры перезапись из одной таблицы в другую, количество перезаписанных строк должно быть равное соответственно входному параметру в data_part_count.
...
Рейтинг: 0 / 0
23.06.2015, 17:24:23
    #38990911
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Mor1L,

Вся процедура заменяется одни запросом INSERT ... SELECT ...

А для чего лимит сделан? Нужен ли он реально?
...
Рейтинг: 0 / 0
23.06.2015, 17:29:55
    #38990918
Mor1L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
miksoft, Нужен, при том что процедура должна быть описана именно так, с использованием курсора. Плюс еще она вызывается в триггере, вообщем база должна быть именно такой.
...
Рейтинг: 0 / 0
23.06.2015, 17:31:50
    #38990919
Mor1L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
miksoft, Процедура должна перезаписать столько, сколько во входном, первое что пришло в голову LIMIT.
...
Рейтинг: 0 / 0
23.06.2015, 17:35:56
    #38990923
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Mor1Lпроцедура должна быть описана именно так, с использованием курсораЧто значит "должна"? Это учебное задание?

Mor1Lона вызывается в триггереВот в триггере и прописать INSERT ... SELECT. Процедура становится вовсе ненужна.

Кстати, LIMIT можно эмулировать на переменных (или бросать обработку курсора на полпути). Но все это сильно неэффективно по сравнению с одиночным запросом. Неэффективно как с точки зрения ресурсов и быстродействия, так и с тояки зрения последующего сопровождения.
...
Рейтинг: 0 / 0
23.06.2015, 17:44:43
    #38990935
Mor1L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
miksoft, Вы правы, это учебное задание. Я тоже сначала сделал одним запросом в триггере, но база должна быть именно такой, и с процедурой. Увы.
...
Рейтинг: 0 / 0
23.06.2015, 17:47:07
    #38990937
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
Mor1Lэто учебное заданиеА, ну тогда на эффективность можно наплевать.
Тогда делайте как задано, а вариантов вам уже накидали.
...
Рейтинг: 0 / 0
27.06.2015, 20:40:33
    #38994354
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIMIT
оппысатся можно!
а почему таблица названа с суфиксом memory??

просто ограничение на курсор и динамический лимит обходиться следующим способом
1)создаёться подготовленое выражение на создание вьюхи(временой таблицы, таблицы в памяти аля тополя)
2) п1 наполняеться данными с лимитом нужным(если есть необходимость в наполнении - ведь для представления например такой необходимости нету)
3)открываеться курсор на полный проход.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LIMIT / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]