存储过程和函数

Posted yuknight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程和函数相关的知识,希望对你有一定的参考价值。

202063

17:15

类似与java中的方法

好处:

1、提高了代码的重用性

2、简化了操作

? ?

#存储过程

含义:可以理解为一组预先编译好的SQL语句的集合,理解成批处理语句

1、提高代码的重用行

2、简化操作

3、减少编译次数并且减少了和数据库的连接次数,提高了效率

? ?

一、创建语句

Create procedure 存储过程(参数列表)

Begin

存储过程体(一组合法的SQL语句)

End

注意:

1、参数列表包含三部分

参数模式 参数名 参数类型

举例:

In stuname varchar(20)

? ?

参数模式

in:该参数可以作为输入,也就是改参数需要调用方传入值

out:该参数可以作为输出,也就是该参数可以作为返回值

inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值又可以返回值

2、如果存储过程也只有一句话,begin end 可以省略

存储过程体中的每句话的结尾必须加分号

存储过程的结尾可以使用delimiter 重新设置

Delimiter ¥

二、调用语法

Call 储存过程名(实参列表);

? ?

案例一:空参模式

###插入数据###

Delimiter $

CREATE PROCEDURE myp1()

BEGIN

INSERT INTO admin(username,password)

VALUES(‘jonn1‘,‘0000‘),(‘bober‘,‘0000‘),(‘rose‘,‘0000‘),(‘jack‘,‘0000‘),(‘trumpe‘,‘0000‘);

END $

? ?

###调用###

Call myq1()$

注意:新版本字段不再受关键字干扰可以正常输入,没必要再添加单引号作为区分,反而会报错;

修改完结束符后,本次会话都将使用修改完成后的符号作为结束符。

案例二:in输入模式

###创建存储过程是实现根据女神名,查询对应的男神信息###

Delimiter $ ##声明结束符

CREATE PROCEDURE myv2(IN beautyName VARCHAR(20)) #创建存储过程以及输入变量

BEGIN

SELECT bo.* #查询目标

FROM boys bo #信息来源

RIGHT JOIN beauty b ON bo.id=b.boyfriend_id #右连接保存所有右部信息

WHERE b.name=beautyName; #查询条件

END $

###调用###

Call myv2(‘小昭‘)$

? ?

###创建存储过程,查询是否登录###

CREATE PROCEDURE myv4(IN username VARCHAR(10),IN PASSWORD VARCHAR(10))

BEGIN

DECLARE result INT DEFAULT 0;

SELECT COUNT(*) INTO result # 赋值给局部变量 result

FROM admin a

WHERE a.`username` =username

AND a.`password`=PASSWORD ;

SELECT IF(result>0,‘成功‘,‘失败‘) AS ‘登陆结果‘;

END$

###调用###

Call myv4(‘john‘,‘8888‘);

? ?

案例3、带out输出模式

###创建存储过程,根据对应的女神名返回男神名###

CREATE PROCEDURE myv5(IN bName VARCHAR(20), OUT gName VARCHAR(20))

BEGIN

SELECT boyName INTO gname

FROM beauty

INNER JOIN boys ON beauty.boyfriend_id = boys.id

WHERE bName = beauty.name;

END$

###调用###

Call (‘小昭@bname)$

Select @bname$

? ?

###创建存储过程,根据女神名返回对应的男神名和魅力值###

CREATE PROCEDURE myv6(IN gName VARCHAR(20),OUT bName VARCHAR(20),OUT bucp INT)

BEGIN

SELECT boyName, userCP INTO bName,bucp

FROM beauty b

RIGHT JOIN boys ON boys.id = b.`boyfriend_id`

WHERE gName = b.name;

END$

###调用###

call myv6(‘小昭‘,@bname,@bucp)$

select @bname,@bucp$

? ?

案例3 inout混合输入输出模式

###输入ab,返回a,b###

CREATE PROCEDURE myv7(INOUT a INT ,INOUT b INT)

BEGIN

SET a= a+20;

SET b= b+20;

END$

? ?

###调用###

Set @a =20$

Set @b=20$

Call myv7(@a,@b)$

Select @a,@b$

? ?

3、删除存储过程

Drop procedure myv1

不可同时删除多个存储过程

? ?

4、查看存储过程

Show create procedure myv2;

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

? ?

??

以上是关于存储过程和函数的主要内容,如果未能解决你的问题,请参考以下文章

存储过程和函数

存储过程和函数

mysql 存储过程与存储函数

MySQL数据库之存储过程与存储函数

12.Mysql存储过程和函数

SQL函数和存储过程的区别