mysql创建存储过程实例_MySQL存储过程示例

为了演示MySQL中的存储过程,我们先创建一些表和数据:

drop table if exists my_test_table;

create table my_test_table (

id integer primary key not null AUTO_INCREMENT,

name varchar(20),

age integer,

point double

);

insert into my_test_table (name,age,point) values

('刘德华',40,10.0),('周杰伦',30,20.0),('周星驰',20,40.0),('范晓萱',20,20.0),('陈绮贞',10,10.0),

('朴树',30,12.0),('谢天笑',40,10.0),('谢春花',20,10.0),('房东的猫',50,100.0),('许巍',30,10.0);

然后创建一个空参数的存储过程:

delimiter //

create procedure test_procedure1()

begin

select avg(point) as pointaverage

from my_test_table;

end //

delimiter ;

然后运行这个存储过程:

call test_procedure1()

可以看到结果如下:

pointaverage|

------------|

24.2|

删除存储过程:

drop procedure test_procedure1

注:这一点好像和DB2不一样。因为我之前在DB2下编写过存储过程,DB2可以定义同名但是不同参数的存储过程,然后DB2删除存储过程的时候是要带参数的。

下面的示例是带3个输出参数的存储过程示例:

drop PROCEDURE if exists test_procedure;

delimiter //

create procedure test_procedure(

OUT pl double,

OUT ph double,

out pa double

)

begin

select min(point) as pointlow

into pl

from my_test_table;

select max(point) as pointhigh

into ph

from my_test_table;

select avg(point) as pointaverage

into pa

from my_test_table;

end //

delimiter ;

但是发现报错了,报错信息如下:

SQL 错误 [S1009]: Parameter pl is not registered as an output parameter

初步估计是因为变量是需要在调用存储过程之前定义的,所以先定义一下变量:

set @pointlow=0,@pointhigh=0,@pointaverage=0;

重新运行,发现还是报一样的错。

我暂时没有发现解决办法~~

但是我按照下面这条语句执行了一下,发现是可以的:

call test_procedure(?,?,?);

并且是有输出的:

1 |2 |3 |

--|---|----|

10|100|24.2|

所以我猜想存储过程在MySQL 8中有所改变。

下面的存储过程包含输入参数,每调用一次会往my_test_table表中插入一条数据:

drop PROCEDURE if exists test_procedure;

delimiter //

create procedure test_procedure(

IN in_name varchar(20),

IN in_age integer,

IN in_point double,

out pa double

)

begin

insert into my_test_table (name,age,point) values (in_name,in_age,in_point);

select avg(point) as pointaverage

into pa

from my_test_table;

end //

delimiter ;

然后调用一下存储过程:

call test_procedure('言承旭',30,1.1,?);

输出如下:

1 |

------------------|

22.099999999999998|

可以发现言承旭的到来拉低了班级的平均分数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值