第一次寫MySQL預存程序遇到的關於DELIMITER的問題

來源:互聯網
上載者:User

轉載: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自己內嵌小程式中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.