存储过程变量定义的几种方法

在mysql存储过程中定义变量有3种方式 declare,set,select

1.declare
declare 变量名 变量类型 default 默认值;
如:DECLARE a VARCHAR(255) DEFAULT ‘C’;
declare定义的变量 相当于一个局部变量 declare只能在begin,end中定义。

2.set
此处的变量不需要声明,mysql会自动根据值类型来确定类型,这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。

DROP PROCEDURE IF EXISTS my_pro;
delimiter $ #将delimiter设置为$
CREATE PROCEDURE my_pro()
BEGIN
set @a=‘B’;#或者@:a='B’也可以
SELECT*from eq WHERE type=@a;
END $ #这里一定要与前面的$符号对应,前面如果写成//,则这里也要写成//
delimiter;
CALL my_pro();

需要注意的事项
a. 变量定义时,也可以写成@:a=‘B’,注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”

3、select
select有两种写法
第一种:与set一样,select @a:=‘B’;
第二种: select @a:=字段名 from 表名 where ……
或 select 字段名 into a from 表名 where ……

注意事项:
在写存储过程时一定要注意delimiter的用法,由于被坑过很多次,这里专门说明一下。delimiter就是代表分号,分隔符的意思.
Q1:为什么设置delimiter?
大家应该记得在交互的时候只要一出现分号; 你之前输入的语句就会直接执行了,但有时我们不希望MySQL这样做,我们需要继续输入别的语句,此时delimiter就发挥了作用,我们将本来默认的delimiter ; 改为别的符号,例如delimiter //或$(注意不可以用) ,写了此语句后MySQL在看到//才会运行这些语句。

ps:但是我试了一下mysql5.7版本的,不用写delimeter好像也没有报错,可能之前的版本必须写吧

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值