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

Код: 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
20.10.2014, 13:27:18
    #38781761
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
В MySQL нет анонимных процедур. Да и точки с запятой пропущены.
...
Рейтинг: 0 / 0
20.10.2014, 13:37:54
    #38781779
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
Попробовал вот так:
Код: 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
20.10.2014, 13:38:37
    #38781781
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
Стас0н,

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

Код: 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
20.10.2014, 13:49:36
    #38781792
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
Стас0н
Код: sql
1.
select @start

А это означает?
...
Рейтинг: 0 / 0
20.10.2014, 13:50:08
    #38781795
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
И ошибки, пожалуйста, показывайте.
...
Рейтинг: 0 / 0
20.10.2014, 13:53:38
    #38781803
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
Код: 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
20.10.2014, 13:56:18
    #38781804
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
Да и в процедуре вроде как надо обьявить переменную, а потом использовать без символа собаки... ну так, на всяк случай сделать правильно...

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

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

Вообще мне нужно пробежаться понедельно по всему периоду из таблички 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
20.10.2014, 15:05:40
    #38781906
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
есть функция номер недели в году по дате...
тобишь год+номер недели уникальная связка. по ней и сгрупировать, что ты там хочешь делать
...
Рейтинг: 0 / 0
20.10.2014, 15:08:22
    #38781912
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
Спасибо, н овсе заработало при вот таком запросе:
Код: 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
20.10.2014, 15:23:02
    #38781944
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
While
А можно как-то результат вызова процедуры импортировать в csv?

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

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

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


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