MySQL存储过程里怎么定义一个参数类型和表的变量类型一样?

MySQL存储过程里怎么定义一个参数类型和表的变量类型一样?,第1张

MySQL存储过程中,定义变量有两种方式:

  1、使用set或select直接赋值,变量名以@开头,可以在一个会话(即连接)的任何地方声明,作用域是整个会话,称为用户变量。例如:set @var=1

  2、 以declare关键字声明的变量,只能在存储过程中使用,称为存储过程变量,主要用在存储过程中,或者是给存储传参数中。例如: declare var1 int default 0

两者的区别是:

    在调用存储过程时,以declare声明的变量都会被初始化为null。而会话变量(即@开头的变量)则不会被再初始化,在一个会话(连接)内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。

下面是一个简单的 存储过程的例子.

DECLARE v_index INT

定义一个 名称为 v_index 的变量, 类型为 INT

MYSQL 变量定义应该只能在 存储过程, 函数里面定义.

不像 Oracle / SQL Server , 一个 BEGIN / END 里面就可以定义/执行了。

mysql>DELIMITER //

mysql>CREATE PROCEDURE TestWhile()

->BEGIN

-> DECLARE v_index INT

->

-> SET v_index = 0

->

-> WHILE v_index <5 DO

->SET v_index = v_index + 1

->SELECT v_index

-> END WHILE

->

->END//

Query OK, 0 rows affected (0.00 sec)

变量总体分为两大类:procedure内部和非procedure内部;

procedure内用declare 声明,作用域仅限于声明的procedure。

另一类就是通常意义上的变量,分为全局(global)和局部(session),用select 或者 set声明,作用域分别是全局和回话级别。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6197545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存