mysql -- 存储过程中 declare 和 set 定义变量的区别
2024-09-27 19:58:22
mysql存储过程中,定义变量有两种方式:
1.使用set或select直接赋值,变量名以 @ 开头.
例如:set @var=1;
可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。
2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
DECLARE var1 INT DEFAULT 0;
主要用在存储过程中,或者是给存储传参数中。
两者的区别是:
在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。
在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
例:
set @v_sql= sqltext;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
最新文章
- Cmder--Windows下命令行利器
- [ACM] poj 1064 Cable master (二分查找)
- 如何解决链入js,innerHTML中文乱码问题呢?
- SQL查询表占用空间大小
- C# .Net三层架构[转]
- 2016-2017 CT S03E02: Codeforces Trainings Season 3 Episode 2
- 腾讯云无法绑定公网IP问题解释与解决方案。
- SNS团队Beta阶段第一次站立会议(2017.05.22)
- Symbol(第6种基本数据类型)
- 关于移动端的UI事件分类
- web api 安全
- 编写 python 小程序,将LOL官网的皮肤保存下来,上传百度云,记录那些强撸灰飞烟灭的日子
- operator new,new operator,placement new的区别
- 获取解码字符串指定位置的数值 Decoded String at Index
- leetcode1008
- 【Coursera】支持向量机
- tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
- 64_c2
- Jumpserver web界面跳板机
- 图解Transformer
热门文章
- 解压zip,解决中文乱码
- JS 运算、判断优化
- OpenERP登录页面调整
- 〖Android〗查找Android中的/system/lib中增加的lib文件是否在apk文件中
- 几种通讯协议的比较RMI >; Httpinvoker >;= Hessian >;>; Burlap >;>; web service (转)
- HBase源代码分析之HRegionServer上MemStore的flush处理流程(一)
- Linux命令-帮助命令:help
- JAVA中的抽象类与接口
- C#:TextBox控件操作类
- 翻翻git之---给传统的搜索增添友好动画 JJSearchViewAnim