2014-03-27 18 views
1

附近的SQL語法錯誤我複製了一個生成的存儲過程。#1064 - 您在''

在重新運行它,我讓你在你的SQL語法附近'出現在第11行

CREATE DEFINER=`root`@`%` PROCEDURE `usp_TEST`() 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT 'Returns the total number of available vehicles' 
BEGIN 
    SELECT COUNT(*) AS Total 
    FROM FLEET 
    WHERE RENTED = 0 
    AND  InService = 1; 
END 

有一個錯誤添加分隔符//與定界符結束;沒有任何幫助。沒有錯誤,但也沒有創建存儲過程。 任何和所有幫助歡迎......

回答

2

正如你已經猜到了,爲了讓你的MySQL客戶端解釋終止了SELECT語句作爲CREATE PROCEDURE語句的結束,你必須在;通知它你希望使用其他語句分隔符。

mysql命令行客戶端中,可以使用DELIMITERcommand執行此操作。例如,要改變你的語句分隔符爲雙斜槓:

DELIMITER // 

如果使用一些其他的客戶端軟件,你必須檢查它的文檔,發現改變語句分隔符的適當的方法。

一旦這樣做,你可以再做:

CREATE DEFINER='root'@'%' PROCEDURE usp_TEST() 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT 'Returns the total number of available vehicles' 
BEGIN 
    SELECT COUNT(*) AS Total 
    FROM FLEET 
    WHERE RENTED = 0 
    AND InService = 1; 
END// 

然而,因爲在這種情況下,你的程序中只包含一個聲明,你不需要使用BEGIN ... END compound statement block,因此可以完全避免改變分隔符:

CREATE DEFINER='root'@'%' PROCEDURE usp_TEST() 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT 'Returns the total number of available vehicles' 
SELECT COUNT(*) AS Total 
FROM FLEET 
WHERE RENTED = 0 
AND InService = 1; 
+0

好的謝謝你的回覆eggyal。我使用的是HeidiSQL客戶端。 確實我試過沒有成功: DELIMITER // MyCODE DELIMITER; 原來我的情況下,它只能在添加DELIMITER時才起作用//僅在開頭。 我在以下網站上找到了我的答案:[鏈接](http://www.experts-exchange.com/Database/MySQL/Q_27383525.html) 感謝各位的幫助 – NetFlash

0

http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html說:

如果用戶值爲克伊芬爲DEFINER子句,它應該被指定爲「USER_NAME」 @「HOST_NAME」(在GRANT語句中使用相同的格式)

換句話說MySQL的帳戶,您需要引用用戶和主機名。把它們當成字符串文字:

CREATE DEFINER='root'@'%' PROCEDURE usp_TEST() 
. . . 
+0

其實,如果一個人檢查[OP的帖子的來源](http://stackoverflow.com/revisions/6845a858-bd5d-42c4-af4a-1dd54cecb656/view-source),用戶規範*被恰當引用。不過,我錯過了複製粘貼到我的答案。 – eggyal

+0

@eggyal:那些是反勾號,而不是單引號。 –

+1

請參閱[指定帳戶名稱](http://dev.mysql.com/doc/en/account-names.html):「*使用反引號(」\「)引用用戶名和主機名作爲標識符或字符串, ''「),單引號(」'''「)或雙引號(」'「'」)。*「 – eggyal

相關問題