2013-11-21 4 views
1

Я отредактировал этот вопрос, потому что нижеприведенные ответы касаются того, что при использовании времени и начала он должен находиться внутри хранимой процедуры.Ошибка кода ошибки цикла Mysql # 1064 внутри хранимой процедуры [изменен]

Итак, теперь я запускаю это внутри хранимой процедуры, но я все еще получаю сообщение об ошибке.

counter; 
while counter < 2 
begin 
GOTO counter 

SELECT var1 AS LOCATION, 
    ROUND(sum(CASE WHEN t2.tagid = var2 THEN t2.floatvalue ELSE 0 END), 2) AS MR 
    ROUND(sum(CASE WHEN t2.tagid = var3 THEN t2.floatvalue ELSE 0 END), 2) AS Flw, 
    ROUND(sum(CASE WHEN t2.tagid = var4 THEN t2.floatvalue ELSE 0 END), 2) AS Prs, 
    ROUND(sum(CASE WHEN t2.tagid = var5 THEN t2.floatvalue ELSE 0 END), 2) AS Lvl 
FROM table2 t2 

INNER JOIN table1 t1 
    ON t1.id = t2.tagid 

WHERE t2.t_stamp = (SELECT MAX(t2.t_stamp) 
        FROM table2 t2 
        WHERE t1.id = t2.tagid) 
counter = counter+1 
end 

1: 
var1 
var2 
var3 
var4 
var5 

2: 
var1 
var2 
var3 
var4 
var5 

Это ошибка, я получаю

MySQL said: #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 'begin GOTO counter SELECT var1 AS LOCATION, ROUND(sum(CASE WHEN t2.tagid' at line 2

И я не включил CREATE PROCEDURE, потому что я видел пост, в котором это было проще просто перейти на ROUTINES панели и вставки SQL Query без CREATE, DELIMITER ... и т. д. Как исправить эту ошибку?

+0

Как вы это делаете? – peterm

+0

Что ты имеешь в виду? на phpmyadmin Я пытаюсь предоставить ссылку sqlfiddle, но я думаю, что сейчас это – sleepsleepsleep90731

+0

Я имею в виду, вы пытаетесь выполнить ее как пакет sql или это часть хранимой процедуры? Если это первый, вы можете сделать это в MySQL. См. Мой ответ. – peterm

ответ

6

Отчеты о движении управления (WHILE, IF и т.д.), в MySQL можно использовать только в контексте хранимой подпрограммы (процедуры, функции, триггер, событие). Вы не можете использовать их самостоятельно в пакете SQL.

Flow Control Statements
MySQL поддерживает IF, CASE, ITERATE, LEAVE LOOP, WHILE и REPEAT конструкции для управления потока внутри сохраненных программ.

+0

Я посетил URL-адрес, указанный вами в вашем ответе, но я ничего не нашел на этой странице, относящийся к ответу, который вы упомянули выше. Не могли бы вы указать мне официальную документацию, которая защищает ваше заявление? –

+0

На самом деле это самые первые слова, написанные на этой странице: «MySQL поддерживает конструкции IF, CASE, ITERATE, LEAVE LOOP, WHILE и REPEAT для управления потоком в сохраненных программах». –

+0

@AndreasWederbrand Точно. Спасибо за цитату. – peterm

Смежные вопросы