mysql最简单的存储过程_mysql学习之写几个最简单的存储过程

写在前面:

文章整理上传于2017年9月26日 ,

是博主学习燕十八的视频后自己整理的笔记 ,如果有错误,你来打我呀

主要是存储过程的简单使用 ,至于什么是存储过程,为什么用过程,什么时候用过程,网上有好多,我不想在这里写了.

1.存储过程语法:

create procedure 过程名称(参数)

begin

//核心代码

end;最简单的示例:

create procedure p1()

begin

select 'hello world';

end;

--调用:

call p1;

2.声明变量 语法:

declare 变量1 类型 default 默认值 ;例:

create procedure p1()

begin

declare age int default 18;

select age ;

end;

2.运算与变量赋值 赋值语法: set 变量名 := 运算 ;

create procedure p1()

begin

declare age int default 18;

set age := age + 20 ;

select age ;

end;

3.逻辑控制 if-end if

--格式:

if 表达式 then

--核心代码;

end if ;

--例:

create procedure p1()

begin

declare age int default 18;

set age := age + 20 ;

if age>20 then

select '你>20了' ;

else if age<20 then

select '你<20' ;

else

select '你=20';

end if ;

end;

4.传参数,输入输出

--格式:

[in/out/inout] 参数名称 类型 ,.....

--示例:

create procedure p1(in height int,in width int,out chengji)

begin

set chengji := height * width ;

if height>width then

select '你高>宽' ;

else if height

select '高

else

select '高=宽';

end if ;

end;

--调用:

set @height :=10;

set @width :=20;

set @chengji :=0;

call p1(@height,@width,@chengji);

select @chengji;

5.流程控制 while

--格式:

while 表达式 do 核心代码 end while;

--例:

create procedure p1(in i int)

begin

while i>0 do

select i;

set i := i-1;

end while;

end;

--调用:

call p1(10);

6多条件分支 case

语法:

case 变量 when 值1 then 核心代码 ;

when 值2 then 核心代码 ;

else 核心代码 ;

end case ;

7.repeat循环

--语法:

repeat 核心代码 until 表达式 end repeat ;

--例:

create procedure p1(in i int)

begin

while i>0 do

select i;

set i := i-1;

end while;

end;

8.0 游标 (sql数据处理 )   --一条sql对应n个资源 ,取出资源的句柄/接口 就是游标

--沿着游标 ,可以一行一行的取出数据

--declare 声明游标,格式: declare 游标名称 cursor for select statement

--open 打开,格式: open 游标名称

--fetch 取值,格式: fetch 有标明 into var1,var2....

--close 关闭,格式: close 游标名称

--使用游标 ,主要是为了实现对数据的控制 ,控制数据进行改变数据,编程

8.1 存储过程中的游标(简单示例)

create procedure p1()

begin

declare rowid int;

declare rownum int;

declare rowname varchar(20);

declare getgoods cursor for select *from good;--声明

open getgoods;

fetch getgoods into rowid,rownum,rowname;--取出赋值一次 ,可以循环多次直到游标到头(如何循环取出多行??)

close getgoods;--关掉

select rowid,rowname,rownum;--打印数据

end

8.2 游标+循环取出数据,越界标志 思路1:定义一个变量 count,使得count=总行数 ,然后while判断之类的直到fetch到count计数跳出

思路2:mysql的cursor中可以用declare continue handler 来操作一个越界标示

--declare continue handler for NOT FOUND set 越界变量 = 1 ;

--相当于发生越界404就把越界变量赋值为0;

--代码(sl2):

create procedure p1()

begin

declare rowid int;

declare rownum int;

declare rowname varchar(20);

declare getgoods cursor for select *from good;--声明

declare yuejie int declare 0;--越界变量

declare continue handler for NOT FOUND set yuejie :=1;--越界变量

open getgoods;

repeat --循环开始

fetch getgoods into rowid,rownum,rowname;--取出赋值

select rowid,rowname,rownum;--打印数据()

until yuejie = 1 end repeat; --循环结束

close getgoods;--关掉

end需完善的地方: 可能取出第一次就出现404 ,应当先fetch一次

实际上,用while符合逻辑语义

当触发404 ,select仍会执行 ,select的数据为上次fetch的数据(缓存,暂且这样说)

8.2handler continue: 触发后继续执行后续语句

exit: 触发后后续不在执行

undo: 触发后,前面的语句撤销(版本是否支持,有待考证)

9.后续补充

暂无.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值