Mysql存储过程(二)
来源:互联网 发布:如何查看淘宝余额 编辑:程序博客网 时间:2024/05/08 22:22
Mysql存储过程里面的变量目前我发现有三种,第一是参数传递进来的变量,第二是DECLARE声明的变量,第三中形式像@x之类的,我就叫它@变量(随便起的,嘿嘿)
最近发现@变量有一个问题,比如:
DELIMITER $$ DROP PROCEDURE IF EXISTS test1$$CREATE PROCEDURE test1(IN a INT) BEGIN #--没有初始化的@x SELECT @x ; IF a = 1 THEN #--如果a=1则把a的值付给@x SET @x = a ; END IF ;END ;$$DELIMITER ; #--第一次执行CALL test1(1) ;#--第二次执行CALL test1(1) ;
执行结果:
第一次执行test1()的时候,@x没有初始化,所以打印出来为null,下面的if语句中,a为@x变量赋值为1,所以第二次就会打印出@x=1。
为什么会这样?后来我查过网上一些资料,@变量的生命周期是在一个一个session里,也就是说,即使我执行完了这个存储过程,@x还会存在,并且参加下一次的运算,这会产生很多的问题,因为这样,@x的值就不能被控制了,特别是在比如像Java程序运行的时候,@x什么时候归0,什么时候保存上次的变量我们无法估计。
我把上面的Mysql Session中断之后重新执行,执行结果:
@x重新变为null。如果@变量不初始化,会产生很多问题,但Mysql的@变量不像Java程序,会报异常提示终止,Mysql是直接执行,结果怎样只能靠自己去判断了。
把程序改为:
DELIMITER $$ DROP PROCEDURE IF EXISTS test1$$CREATE PROCEDURE test1(IN a INT) BEGIN #--初始化@x SET @x = 0 ; SELECT @x ; IF a = 1 THEN #--如果a=1则把a的值付给@x SET @x = a ; END IF ;END ;$$DELIMITER ;
这样执行结果:
这样就可以控制@变量,不让它产生奇怪的后果。
~综:Mysql使用@变量一定必须要初始化!
0 0
- mysql 存储过程(二)
- Mysql存储过程(二)
- mysql 存储过程(二)
- mysql的存储过程(二)
- MySQL之存储过程(二)
- Mysql存储过程数据汇总(二)
- MySQL存储过程的学习(二)
- 存储过程(二)
- 存储过程(二)
- 存储过程(二)
- MySQL 5.0新特性教程(二)存储过程
- Hive存储过程HQL/SQL(二)– 在Hive存储过程中读写MySQL表
- Mysql数据库之二:初学存储过程
- [学习笔记]MySql存储过程学习二
- 存储过程教程(二)
- 存储过程教程(二)
- 存储过程学习(二)
- 存储过程教程(二)
- JavaScript学习笔记(三)
- Surrounded Regions(leetcode)
- codeforce 486B
- 解决debian7每次开机都是最高亮度的问题
- Linux编程之errno
- Mysql存储过程(二)
- Android中关于矩阵(Matrix)前乘后乘的一些认识
- 中国国家天气预报接口更新
- 什么时候用单向关联和双向关联
- 逻辑地址
- 编程珠玑十一章课后题答案
- Eclipse中自动添加注释(作者,时间)
- iOS 从 Java 原样抄用的一段整型转二进制代码
- Map key为Integer类型时用Long值取value问题