存储过程的变量(2)

需求:编写存储过程,使用变量取uid=2的用户名

Delimiter $$
create procedure testa()
Begin
Declare my_uname varchar(32) default  ‘’;
  set my_uname=‘hxf’;
  select uname into my_uname from users where uid=2;
  select my_uname;
end;
$$
Delimiter ;

1.变量的声明使用declare,一句declare只声明一个变量,变量必须先声明后使用
2.变量具有数据类型和长度,与mysql的SQL数据类型保持一致,因此甚至还能指定默认值、字符集和排序规则等
3.变量可以通过set来赋值,也可以通过select into的方式赋值
4.变量需要返回,可以使用select语句,如:select 变量名

需求:统计表hxf,users的行数量和users表中最早,最晚的注册时间。

Delimiter $$
create procedure stats_user()
Begin
     begin
          Declare hxf_sum int default 0;
          Declare users_sum int default 0;
          select count(*) into hxf_sum from hxf;
          select count(*) into users_sum from users;
          select hxf_sum,users_sum;
     end;

     begin
         Declare max_regtime  timestamp;
         Declare min_regtime  timestamp; 
         select max(regtime),min(regtime)  into max_regtime,min_regtime from users ;
         select  hxf_sum,users_sum,max_regtime,min_regtime;
     end;
end;
$$
Delimiter ;

1.变量是有作用域的,作用范围在begin与end块之间,end结束变量的作用范围即结束。
2.需要多个块之间传递值,可以使用全局变量,即放在所有代码块之前。
3.传参变量是全局的,可以在多个块之间起作用

原文地址:https://www.cnblogs.com/lirunsheng/p/10982024.html