powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / While
16 сообщений из 16, страница 1 из 1
While
    #38781756
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Почему не получается выполнить вот такой простой запрос?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
	SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start
	SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end
	WHILE @start < @end DO
		select @start
		SET @start := ADDDATE(@start, INTERVAL 7 DAY)
	END WHILE
END



Отдельно
Код: sql
1.
SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start

работает
...
Рейтинг: 0 / 0
While
    #38781761
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MySQL нет анонимных процедур. Да и точки с запятой пропущены.
...
Рейтинг: 0 / 0
While
    #38781779
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE query ()
BEGIN
	SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start;
	SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end;
	WHILE @start < @end DO
	select @start;
	SET @start := ADDDATE(@start, INTERVAL 7 DAY);
	END WHILE;
END


Ругается на каждую строчку с ";".
...
Рейтинг: 0 / 0
While
    #38781781
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н,

еще DELEIMITER нужен
посмотрите хотя бы примеры по CREATE PROCEDURE
...
Рейтинг: 0 / 0
While
    #38781784
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, скопировал не весь запрос, а править посты тут нельзя.
Вот такой запрос был:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DELIMITER//
CREATE PROCEDURE query ()
BEGIN
	SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start;
	SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end;
	WHILE @start < @end DO
	select @start
	SET @start := ADDDATE(@start, INTERVAL 7 DAY)
	END WHILE;
END//
DELIMITER;
...
Рейтинг: 0 / 0
While
    #38781792
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н
Код: sql
1.
select @start

А это означает?
...
Рейтинг: 0 / 0
While
    #38781795
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ошибки, пожалуйста, показывайте.
...
Рейтинг: 0 / 0
While
    #38781803
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
select @start 


Здесь просто вывожу значение @select (вообще на этой месте будет большой запрос, но для начала сделал так)

Вот запрос с ошибками:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DELIMITER//
    -> CREATE PROCEDURE query ()
    -> BEGIN
    -> SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start;
ERROR 1064 (42000): 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 'DELIMITER//CREATE PROCEDURE query ()
BEGIN
SELECT hist_from_dt FROM parameters W' at line 1
mysql> SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end;
Query OK, 1 row affected (0.00 sec)

mysql> WHILE @start < @end DO
    -> select @start
    -> SET @start := ADDDATE(@start, INTERVAL 7 DAY)
    -> END WHILE;
ERROR 1064 (42000): 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 'WHILE @start < @end DO
select @start
SET @start := ADDDATE(@start, INTERVAL 7 DA' at line 1
mysql> END;//
ERROR 1064 (42000): 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 'END' at line 1
    -> DELIMITER;
ERROR 1064 (42000): 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 '//
DELIMITER' at line 1
...
Рейтинг: 0 / 0
While
    #38781804
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и в процедуре вроде как надо обьявить переменную, а потом использовать без символа собаки... ну так, на всяк случай сделать правильно...

хотя не спорю, с собакой тоже должно работать...
...
Рейтинг: 0 / 0
While
    #38781840
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н,

после слова DELIMITER нужен пробел.
...
Рейтинг: 0 / 0
While
    #38781844
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то никак...

Вообще мне нужно пробежаться понедельно по всему периоду из таблички parameters (там всего одна строка) и выгрузить результат в файл. Начало периода - hist_from_dt. Конец - hist_to_dt.

Пробежаться по периоду с использованием таких дат:
Код: sql
1.
2.
	SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start;
	SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end;



Получается. А как по неделям сделать?
...
Рейтинг: 0 / 0
While
    #38781906
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть функция номер недели в году по дате...
тобишь год+номер недели уникальная связка. по ней и сгрупировать, что ты там хочешь делать
...
Рейтинг: 0 / 0
While
    #38781912
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, н овсе заработало при вот таком запросе:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DELIMITER //
CREATE PROCEDURE query ()
BEGIN
	SELECT hist_from_dt FROM parameters WHERE param_id='1' INTO @start;
	SELECT hist_to_dt FROM parameters WHERE param_id='1' INTO @end;
	WHILE @start < @end DO
		select @start;
		SET @start := ADDDATE(@start, INTERVAL 7 DAY);
	END WHILE;
END;//
...
Рейтинг: 0 / 0
While
    #38781944
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно как-то результат вызова процедуры импортировать в csv?

Вот такая штука не проходит:
Код: sql
1.
2.
3.
call query()
into outfile '/tmp/test10.csv'
FIELDS TERMINATED BY ','
...
Рейтинг: 0 / 0
While
    #38781958
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н,

Перепишите все в один SELECT на основе опорной таблицы (т.е. без процедуры). Тогда и экс порт в csv получится.

Или добавляйте into outfile внутрь процедуры. Правда, не уверен, что получится.
...
Рейтинг: 0 / 0
While
    #38781966
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как мне с WHILE без процедуры сделать..? Вы бы не могли просто накидать структуру запроса?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / While
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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