MySQL可不可以直接定义程序_mysql8 参考手册-定义存储程序

每个存储的程序都包含一个由SQL语句组成的主体。该语句可以是由多个用分号(;)字符分隔的语句组成的复合语句。例如,以下存储过程的主体由一个BEGIN ... END包含一个SET 语句的块 和一个REPEAT本身包含另一个SET 语句的循环组成 :

CREATE PROCEDURE dorepeat(p1 INT)

BEGIN

SET @x = 0;

REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;

END;

如果使用mysql客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql本身将分号识别为语句定界符,因此您必须临时重新定义定界符,以使mysql将整个存储的程序定义传递给服务器。

要重新定义mysql分隔符,请使用 delimiter命令。以下示例显示了如何针对dorepeat()刚刚显示的过程执行此操作。分隔符已更改为//允许将整个定义作为单个语句传递到服务器,然后;在调用该过程之前还原到。这使得; 过程主体中使用的定界符可以传递到服务器,而不是由mysql 本身解释。

mysql> delimiter //

mysql> CREATE PROCEDURE dorepeat(p1 INT)

-> BEGIN

-> SET @x= 0;

-> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;

-> END

-> //

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter;

mysql> CALL dorepeat(1000);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @x;

+------+

| @x |

+------+

| 1001 |

+------+

1 row in set (0.00 sec)

您可以将定界符重新定义为除之外的其他字符串 //,并且定界符可以包含一个或多个字符。您应该避免使用反斜杠(\)字符,因为这是MySQL的转义字符。

下面是一个函数示例,该函数采用参数,使用SQL函数执行操作,然后返回结果。在这种情况下,delimiter由于函数定义不包含内部;语句定界符,因此无需使用 :

mysql> CREATE FUNCTION hello (s CHAR(20))

mysql> RETURNS CHAR(50) DETERMINISTIC

-> RETURN CONCAT('Hello, ',s,'!');

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT hello('world');

+----------------+

| hello('world') |

+----------------+

| Hello, world! |

+----------------+

1 row in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值