第一次写MySQL存储过程遇到的关于DELIMITER的问题

转载:http://www.phppan.com/2010/05/mysql-delimit/

第一次写MySQL存储过程遇到的关于DELIMITER的问题
在很久很久以前写过Oracle的存储过程,昨天由于某些特殊的原因导致需要在MySQL中写一些存储过程,只能现学现用了
首先写了一个非常简单的存储过程,但是就是如此简单的过程也报错了,其代码如下:

1
2
3
4
5
 
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客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号
于是得到如下所示代码

1
2
3
4
5
6
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自己内嵌小程序中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值