MySQL 5.7版本说明
每个存储的程序都包含一个由SQL语句组成的主体。此语句可以是由多个语句组成的复合语句,以分号(;
)字符。例如,以下存储过程的主体由开始……结束
块,该块包含集
语句和重复
循环本身包含另一个集
声明:
CREATE PROCEDURE dorepeat(p1 INT) BEGIN SET @x = 0;重复SET @x = @x + 1;直到@x > p1结束重复;结束;
如果你使用mysql客户端程序定义一个包含分号字符的存储程序时,出现了一个问题。默认情况下,mysql本身将分号识别为语句分隔符,因此必须临时重新定义分隔符以引起mysql将整个存储的程序定义传递给服务器。
重新定义mysql分隔符时,使用分隔符
命令。的示例如何执行此操作dorepeat ()
程序已经显示了。分隔符更改为//
以使整个定义作为一条语句传递给服务器,然后恢复到;
在调用过程之前。这将启用;
在过程体中使用的分隔符,该分隔符将传递给服务器,而不是由mysql本身。
mysql> delimiter // mysql> CREATE PROCEDURE dorepeat(p1 INT) -> BEGIN -> SET @x = 0;-> REPEAT SET @x = @x + 1;直到@x > p1结束重复;-> END -> //查询OK, 0 rows affected (0.00 sec) mysql> delimiter;mysql>调用dorepeat(1000)mysql> SELECT @x;+------+ | @ x | +------+ | 1001年 | +------+ 1行集(0.00秒)
可以将分隔符重新定义为字符串//
,分隔符可以由单个字符或多个字符组成。你应该避免使用反斜杠(\
)字符,因为这是MySQL的转义字符。
下面是一个函数的示例,该函数接受参数,使用SQL函数执行操作并返回结果。在这种情况下,没有必要使用分隔符
因为函数定义不包含内部;
语句分隔符:
mysql>返回CHAR(50) DETERMINISTIC ->返回CONCAT(' hello,',s,'!');mysql> SELECT hello('world');+----------------+ | 你好(“世界上 ') | +----------------+ | 你好,世界!| +----------------+ 1 row in set (0.00 sec)