mysql存储过程set赋值报错_存储过程变量定义的⼏种⽅法在mysql存储过程中定义变量有3种⽅式 declare,set,select
1.declare
declare 变量名 变量类型 default 默认值;
如:DECLARE a VARCHAR(255) DEFAULT ‘C’;
declare定义的变量 相当于⼀个局部变量 declare只能在begin,end中定义。
conversation意思
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好像也没有报错,可能之前的版本必须写吧