相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.4 kb
手册页(Zip)- 347.1 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

23.1定义存储程序

每个存储的程序都包含一个由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)