最近在使用MySQL命令行執行函數創建時遇到了一些報錯問題,總結一下具體情況如下:
mysql>DELIMITER // mysql>CREATE FUNCTION myFunc(a INT) RETURNS INT ->BEGIN ->DECLARE b INT; ->SET b = 1; ->RETURN a * b; ->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 '//\nCREATE FUNCTION myFunc(a INT) RETURNS INT\nBEGIN\nDECLARE b INT;\nSET' at line 1
在執行以上代碼時,會出現"ERROR 1064(42000)"的報錯,這個錯誤信息一般都說明語法有誤,但我們的語法明顯是正確的,因此需要進一步排查問題。
經過多次嘗試后,我們發現這里的問題是DELIMITER命令導致的語法錯誤,因為在DELIMITER命令后面沒有跟著具體的分隔符,最后導致代碼解析時出現錯誤。
因此,我們需要將DELIMITER命令后面設置的分隔符與代碼中使用的分隔符保持一致,這樣才能避免出現以上錯誤。
修改后的正確代碼如下:
mysql>DELIMITER $$ mysql>CREATE FUNCTION myFunc(a INT) RETURNS INT ->BEGIN ->DECLARE b INT; ->SET b = 1; ->RETURN a * b; ->END $$ Query OK, 0 rows affected (0.00 sec)
可以看到,在設置DELIMITER命令后面加上分隔符"$"后,再執行函數創建語句,就能成功創建函數了。