MySql存储过程—3、变量
2012-08-17 21:45
302 查看
1、变量的定义
在Mysql里面可以像我们写代码中一样定义变量来保持中间结果,看下面的格式:
DECLARE相当于关键字,有点类似var,表示定义一个变量;然后variable_name是你指定的变量名称;datatype表示数据类型而括号内的size表示对应类型的格式比如varchar(50)这样子,这里需要注意的是datatype只能是MySql支持的那些基本数据类型;DEFAULT关键字指明了变量的默认值为default_value。
定义多个相同类型的变量可以这样子:
2、变量的赋值
同程序里面一样,定义了变量,我们也需要在程序中对他赋值,下面是示例代码:
可以看到进行赋值时候需要在前面加上:SET 这个关键字。
当然由于存储过程的特殊性(用于数据库的数据操作),所以除了SET这种赋值方法,还可以通过SELECT INTO语句将返回的值赋给变量:
看到这里把products的记录数赋给了total_products这个变量。所以如果上面我们表格内是3个记录的话,这里total_products就是等于3了
3、变量的Scope(作用范围)
变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。
另外有种变量叫做会话变量(session variable),也叫做用户定义的变量(user defined variable)。这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用途比较广,因为只要在一个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。下面看个简单的例子,以理解这种变量和本地变量的区别:
首先修改下之前的存储过程如下:
这里定义了一个是local的变量,一个是session的变量,对于session的变量,不需要定义,mysql根据你赋给该变量的值来确定类型(更详细的需要另一篇文章来解释:>)。
然后我们在Query browser上面先执行这样一条语句来对@t2进行赋初值:
赋予往初值后我们调用我们的存储进程。每次执行这个存储进程我们发现t1的值是不变的,而@t2每次会增加1,因为我们这是在一个会话里面所以@t2就一直作用着,每次自己增加1.
在Mysql里面可以像我们写代码中一样定义变量来保持中间结果,看下面的格式:
DECLARE variable_name datatype(size) DEFAULT default_value;
DECLARE相当于关键字,有点类似var,表示定义一个变量;然后variable_name是你指定的变量名称;datatype表示数据类型而括号内的size表示对应类型的格式比如varchar(50)这样子,这里需要注意的是datatype只能是MySql支持的那些基本数据类型;DEFAULT关键字指明了变量的默认值为default_value。
定义多个相同类型的变量可以这样子:
DECLARE x, y INT DEFAULT 0表示定义了两个变量x、y,整形,默认值为0
2、变量的赋值
同程序里面一样,定义了变量,我们也需要在程序中对他赋值,下面是示例代码:
DECLARE total_count INT DEFAULT 0 SET total_count = 10;
可以看到进行赋值时候需要在前面加上:SET 这个关键字。
当然由于存储过程的特殊性(用于数据库的数据操作),所以除了SET这种赋值方法,还可以通过SELECT INTO语句将返回的值赋给变量:
DECLARE total_products INT DEFAULT 0 SELECT COUNT(*) INTO total_products FROM products
看到这里把products的记录数赋给了total_products这个变量。所以如果上面我们表格内是3个记录的话,这里total_products就是等于3了
3、变量的Scope(作用范围)
变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。
另外有种变量叫做会话变量(session variable),也叫做用户定义的变量(user defined variable)。这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用途比较广,因为只要在一个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。下面看个简单的例子,以理解这种变量和本地变量的区别:
首先修改下之前的存储过程如下:
这里定义了一个是local的变量,一个是session的变量,对于session的变量,不需要定义,mysql根据你赋给该变量的值来确定类型(更详细的需要另一篇文章来解释:>)。
然后我们在Query browser上面先执行这样一条语句来对@t2进行赋初值:
赋予往初值后我们调用我们的存储进程。每次执行这个存储进程我们发现t1的值是不变的,而@t2每次会增加1,因为我们这是在一个会话里面所以@t2就一直作用着,每次自己增加1.
相关文章推荐
- MYSQL的存储过程、变量、函数及部分简单优化(非常有用,有存储过程+光标实例)
- mysql基础---存储过程及变量定义(十)
- MySQL存储过程中使用SELECT …INTO语句为变量赋值(转)
- mysql 存储过程中变量的定义与赋值操作
- mysql变量监控的存储过程
- mysql存储过程中如何调用变量作为表名
- MYSQL存储过程中 表名 使用变量
- MySql存储过程—3、变量
- mysql存储过程是使用--变量传参动…
- mysql:用户变量、系统变量、局部变量(存储过程中的)
- mysql存储过程中 declare 和 set 定义变量的区别
- mysql 存储过程中变量的定义与赋值操作
- mysql 存储过程中 使用变量做表明[学习记录]
- mysql 存储过程中 limit之后使用分页变量,传入分页参数. 类似于微博游标分批次获取信息;问号参数类似于c#的string.format;问号占位符
- mysql 存储过程中变量的定义与赋值操作
- Mysql 存储过程查询结果赋值到变量的方法
- MySQL存储过程中一直困扰的 の 变量中的@
- mysql存储过程变量名与字段名重复导致查不到数据
- MySql中存储过程中的@变量总是无法执行,提示Parameter '@XXX' must be defined
- MySql存储过程—3、变量