简单记录一下存储过程的变量与赋值。
1.局部变量:
作用范围:用户自定义,在begin/end块中有效。
语法:
声明局部变量:declare var_name type [default var_value];
举例:declare nickname varchar(32);
eg:
-- set赋值
delimiter $$
create procedure sp_var01()
begin
declare nickname varchar(32) default 'unkown';
set nickname = 'ZS';
-- set nickname := 'SF';
select nickname;
end$$
利用into进行赋值:
-- into赋值
delimiter $$
create procedure sp_var_into()
begin
declare emp_name varchar(32) default 'unkown' ;
declare emp_no int default 0;
select e.empno,e.ename into emp_no,emp_name from emp e where e.empno = 7839;
select emp_no,emp_name;
end$$
2.用户变量:
作用范围: 用户自定义,当前会话(连接)有效.
语法:
@var_name
不需要提前声明,使用即声明
eg:
-- 赋值
delimiter $$
create procedure sp_var02()
begin
set @nickname = 'ZS';
-- set nickname := 'SF';
end$$
call sp_var02() $$
select @nickname$$ --可以看到结果
3.会话变量:
作用范围: 由系统提供,当前会话(连接)有效。
语法:
@@session.var_name
eg:
show session variables; -- 查看会话变量
select @@session.unique_checks; -- 查看某会话变量
set @@session.unique_checks = 0; --修改会话变量
4.全局变量:
作用范围: 由系统提供,整个mysql服务器有效。
语法:
@@global.var_name
eg:
-- 查看全局变量中变量名有char的记录
show global variables like '%char%';
-- 查看全局变量character_set_client的值
select @@global.character_set_client;
举例四种形式的变量之间相互赋值:
-- 设置$$为结束符
DELIMITER $$
-- 指定使用数据库
USE stores$$
-- 判空
DROP PROCEDURE IF EXISTS variable_define$$
-- 创建存储过程
CREATE PROCEDURE variable_define()
BEGIN
-- 局部变量 在begin/end中有效
DECLARE limitQuota VARCHAR(24) DEFAULT '额度总控';
-- 用户变量,当前会话有效
SET @user_variable = '用户变量';
-- 会话变量,由系统提供,当前会话(连接)有效
SELECT @@session.unique_checks; -- 查看某会话变量
SET @@session.unique_checks = 0; -- 修改会话变量
-- 全局变量,由系统提供,整个mysql服务器有效
SET @@global.character_set_client='test';
-- 用set,将户变量赋值给局部变量,其它的就不举例子了
SET limitQuota=@user_variable;
SELECT limitQuota;
END$$
DELIMITER ; -- 此语句可以缺省,将结束符置空,推荐置空写法
-- 调用存储过程
CALL variable_define();
存储过程的输入输出请参看我的另一篇blog:存储过程的输入输出概述