Atitit mysql存储过程编写指南 1. 定义变量 1 1.1. 变量名以@开头用户变量 会话变量 1 1.2. 以declare关键字声明 存储过程变量 2 1.3. @是用户自定义变量,

Atitit mysql存储过程编写指南

 

 

1. 定义变量 1

1.1. 变量名以@开头用户变量 会话变量 1

1.2. 以declare关键字声明 存储过程变量 2

1.3. @是用户自定义变量,@@是系统定义变量 2

1.4. 变量赋值 使用set语句或select 2

1.5. 表记录赋值到变量 用set或into的方式来实现赋值 2

1.6. 查询结果存储到变量 3

2. 参数与返回值 4

2.1. 设定参数与返回值  `obj_id` int ,,返回类型 varchar(200) 4

2.2. 在语句中使用传入的obj_id参数 4

2.3. 存储过程返回值使用out参数 4

3. other 5

3.1. 测试的时候,注意字符串参数要包含双引号 5

3.2. Sql参数拼接 CONCAT, 传入like的参数 5

3.3. Sql语句调用存储过程call 语句 5

3.4. 游标与循环 6

4. 异常处理机制 7

5. 调试 7

5.1. 日志法 7

5.2. Print法 7

6. 调用外部程序  自定义事件机制模式 7

 

 

  1. 定义变量

MySQL存储过程的declare声明变量必须放在最前面

MySQL存储过程中,定义变量有两种方式: 

    1. 变量名以@开头用户变量 会话变量

1、使用set或select直接赋值,变量名以@开头

例如:

set @var=1;

可以在一个会话的任何地方声明,作用域是整个会话,称为用户变量。

 

    1. 以declare关键字声明 存储过程变量

2、以declare关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如: 

declare var1 int default 0;

主要用在存储过程中,或者是给存储传参数中。

两者的区别是: 

在调用存储过程时,以declare声明的变量都会被初始化为null。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。

    1. @是用户自定义变量,@@是系统定义变量

 

    1. 变量赋值 使用set语句或select
    2. 表记录赋值到变量 用set或into的方式来实现赋值

 

方式 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;

 

 

    1. 查询结果存储到变量  

 

把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:

 

  1.  

多个列的情况下似乎只能用 into 方式

  1.  
  2.  

23

  1.  
  2.  

select max(status), avg(status) into @max, @avg from test_tbl;

  1.  
  2.  

24

  1.  
  2.  

select @max, @avg;

  1.  

 

 

定义变量以及

declare namex  VARCHAR(200);

 

   select city.city_name into namex  from city where city_id=obj_id  ;

 

 

 

 

 

  1. 参数与返回值
    1. 设定参数与返回值  `obj_id` int ,,返回类型 varchar(200)

 

    1. 在语句中使用传入的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

    1. 存储过程返回值使用out参数

out参数 rzt

 

 

BEGIN

#Routine body goes here...

set   rzt=9;

END

 

 

call ret(@rzt);

select @rzt as rzt

 

  1. other
    1. 测试的时候,注意字符串参数要包含双引号

Call xxxx()

使用gui根据测试sp的时候,只填写参数即可。

    1. Sql参数拼接 CONCAT, 传入like的参数

select * from  wxb_customer where customer_name like CONCAT('%',uname ,'%');

 

 

    1. Sql语句调用存储过程call 语句

call query1('mer')

 

 

 

    1. 游标与循环

 

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

 

 

 

 

  1. 异常处理机制
  2. 调试
    1. 日志
    2. Print法

输出  没有print,使用select代替即可

 

  1. 调用外部程序  自定义事件机制模式

 

 

作者:: 绰号:老哇的爪子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

 

posted @ 2019-08-07 13:42  attilaxAti  阅读(101)  评论(0编辑  收藏  举报