Atitit mysql存储过程编写指南 1. 定义变量 1 1.1. 变量名以@开头用户变量 会话变量 1 1.2. 以declare关键字声明 存储过程变量 2 1.3. @是用户自定义变量,
Atitit mysql存储过程编写指南
1.5. 表记录赋值到变量 用set或into的方式来实现赋值 2
2.1. 设定参数与返回值 `obj_id` int ,,返回类型 varchar(200) 4
3.2. Sql参数拼接 CONCAT, 传入like的参数 5
MySQL存储过程的declare声明变量必须放在最前面
MySQL存储过程中,定义变量有两种方式:
1、使用set或select直接赋值,变量名以@开头
例如:
set @var=1;
可以在一个会话的任何地方声明,作用域是整个会话,称为用户变量。
2、以declare关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
declare var1 int default 0;
主要用在存储过程中,或者是给存储传参数中。
两者的区别是:
在调用存储过程时,以declare声明的变量都会被初始化为null。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。
方式 2
15
set @cnt = (select count(*) from test_tbl);
16
select @cnt;
17
18
-- 方式 3
19
select count(*) into @cnt1 from test_tbl;
20
select @cnt1;
21
22
-- 多个列的情况下似乎只能用 into 方式
23
select max(status), avg(status) into @max, @avg from test_tbl;
24
select @max, @avg;
把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:
多个列的情况下似乎只能用 into 方式
23
select max(status), avg(status) into @max, @avg from test_tbl;
24
select @max, @avg;
定义变量以及
declare namex VARCHAR(200);
select city.city_name into namex from city where city_id=obj_id ;
直接使用。。
BEGIN
#Routine body goes here...
declare namex VARCHAR(200);
#call log( obj_id);
select city.city_name into namex from city where city_id=obj_id ;
RETURN namex;
END
out参数 rzt
BEGIN
#Routine body goes here...
set rzt=9;
END
call ret(@rzt);
select @rzt as rzt
Call xxxx()
使用gui根据测试sp的时候,只填写参数即可。
select * from wxb_customer where customer_name like CONCAT('%',uname ,'%');
call query1('mer')
begin
DECLARE memberNo VARCHAR(30);
DECLARE newmoney decimal;
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT member_no memberNo FROM s_member where department_id = departmentId and unit_id = unitId
and duties_id = dutiesId and sex = sex;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
SET newmoney=moneys;
set count = 0;
OPEN cur1;
REPEAT
FETCH cur1 INTO memberNo;
IF NOT done THEN
set count =count+1;
UPDATE s_member SET money = money+newmoney where member_no =memberNo;
INSERT l_transaction(member_no,price,type,content,add_time)VALUES(memberNo,moneys,1,'洗衣券发放',NOW());
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
End
输出 没有print,使用select代替即可
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
捕鸟王"Bird Catcher kok 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王
简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
头衔:uke总部o2o负责人,全球网格化项目创始人,
uke交友协会会长 uke捕猎协会会长 Emir Uke部落首席大酋长,
uke宗教与文化融合事务部部长, uke宗教改革委员会副主席
uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,
uke 首席cto 软件部门总监 技术部副总监 研发部门总监主管 产品部副经理 项目部副经理 uke科技研究院院长 uke软件培训大师
uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人
Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长
uke终身教育学校副校长 Uke医院 与医学院方面的创始人
uec学院校长, uecip图像处理机器视觉专业系主任 uke文档检索专业系主任
Uke图像处理与机器视觉学院首席院长
Uke 户外运动协会理事长 度假村首席大村长 uke出版社编辑总编
转载请注明来源:attilax的专栏 ?http://blog.csdn.net/attilax
--Atiend v8