轉載:http://www.phppan.com/2010/05/mysql-delimit/
第一次寫MySQL預存程序遇到的關於DELIMITER的問題
在很久很久以前寫過Oracle的預存程序,昨天由於某些特殊的原因導致需要在MySQL中寫一些預存程序,只能現學現用了
首先寫了一個非常簡單的預存程序,但是就是如此簡單的過程也報錯了,其代碼如下:
12345 |
CREATE PROCEDURE test()BEGIN SELECT 'Hello Word!'; END |
在phpmyadmin及用戶端都報錯,在phpmyadmin中顯示:#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 ” at line 3
顯然,程式在第一個分號後面出錯了
原因不明,遂google之,找到如下地址:http://www.cnblogs.com/hsqzzzl/archive/2008/02/21/1076646.html
文章作者有說:分隔字元是通知MySQL用戶端已經輸入完成的符號。一直都是用“;”,但是在預存程序中不行,因為預存程序中很多語句都需要用到分號
於是得到如下所示代碼
123456 |
DELIMITER ||CREATE PROCEDURE test()BEGIN SELECT 'Hello Word!'; END ||DELIMITER ; |
如果不想使用DELIMITER,在phpmyadmin中執行命令時,在Delimiter文字框中填寫||
另在百度百科中有說明:http://baike.baidu.com/view/3068266.htm
MySQL中delimit命令。
這個命令與預存程序沒什麼關係。
其實就是告訴mysql解譯器,該段命令是否已經結束了,mysql是否可以執行了。
即改變輸入結束符。
預設情況下,delimiter是分號“;”。
在命令列用戶端中,如果有一行命令以分號結束,
那麼斷行符號後,mysql將會執行該命令。
但有時候,不希望MySQL這麼做。因為可能輸入較多的語句,且語句中包含有分號。
預設情況下,不可能等到使用者把這些語句全部輸入完之後,再執行整段語句。
因為mysql一遇到分號,它就要自動執行。
這種情況下,就可以使用delimiter,把delimiter後面換成其它符號,如//或$$。
此時,delimiter作用就是對整個小段語句做一個簡單的封裝。
此命令多用在定義子程式,觸發程式等musql自己內嵌小程式中。