2013-11-21 86 views
1

我編輯了這個問題導致下面的答案提到,當使用while和begin時,它應該在存儲過程中。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面板和粘貼沒有CREATE,DELIMITER等的SQL查詢...等。 我該如何解決這個錯誤?

+0

你是怎麼執行這段代碼的? – peterm

+0

你是什麼意思?在phpmyadmin 我想提供的sqlfiddle鏈接,但我認爲它現在下來 – sleepsleepsleep90731

+0

我的意思是你試圖執行它作爲一個SQL批處理或它是存儲例程的一部分?如果它是一個前者,你可以在MySQL中做到這一點。看到我的答案。 – peterm

回答

6

在MySQL控制流語句(WHILEIF等)可以在存儲程序(過程,函數,觸發器,事件)的上下文中使用的僅。你不能在SQL批處理中自己使用它們。

Flow Control Statements
MySQL支持的IF,CASE,迭代,所存儲的程序內離開LOOP,WHILE,和REPEAT構建用於流控制

+0

我已經訪問了您在答案中指定的網址,但是我沒有在該網頁上找到與上面提到的答案相關的任何內容。您能否請我指出支持您聲明的官方文件? –

+0

它實際上是寫在頁面上的第一句話「MySQL支持存儲程序中的流量控制的IF,CASE,ITERATE,LEAVE LOOP,WHILE和REPEAT結構。」 –

+0

@AndreasWederbrand準確無誤。感謝您的引用。 – peterm