mysql存储过程之变量及其特点和应用(二)

21 篇文章 0 订阅
17 篇文章 0 订阅

案例1(变量及其特点和应用)

通过存储过程获取id为2的表数据

DELIMITER $$
CREATE PROCEDURE test1()
BEGIN
-- 声明变量,一个declare只能声明一个遍历
DECLARE NAME VARCHAR(32) DEFAULT '';

-- 1、可以直接赋值
-- set name = 'hahaha'; 

-- 2、可以通过查询将结果集赋值
SELECT mark_name INTO NAME FROM book_mark WHERE id = 2;

-- 返回值
SELECT NAME;
END;
$$
DELIMITER ;

总结

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

案例2(测试变量的作用域):

统计表book_mark和表user的行数量,以及book_mark最小最大ID的数据记录

DELIMITER $$
CREATE PROCEDURE maxiaojun()
BEGIN
  DECLARE book_count INT DEFAULT 0;
  DECLARE user_count INT DEFAULT 0;
  -- 使用两个代码块,测试变量的作用范围,可以发现声明的变量只在当前begin-end作用域有效
  BEGIN
    SELECT COUNT(1) INTO book_count FROM book_mark;
    SELECT COUNT(1) INTO user_count FROM USER;
    SELECT book_count, user_count;
  END;
  
  BEGIN
    DECLARE min_id BIGINT(11) DEFAULT 0;
    DECLARE max_id BIGINT(11) DEFAULT 0;
    SELECT MIN(id),MAX(id) INTO min_id, max_id FROM book_mark;
    SELECT min_id, max_id,book_count,user_count;
  END;
END;
$$
DELIMITER ;

总结

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

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值