22.存储过程和函数

一、存储过程:一组预先编译好的sql语句的集合,理解成批处理语句。

优点:

1.提高代码的重用性。

2.简化操作。

3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。

(一)创建语法

create procedure 存储过程名(参数列表)

begin

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

end;

注意:

1.参数列表包含三部分:参数的模式、参数名、参数类型

参数模式:

1)in:该参数可以作为输入

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

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

2.如果存储过程体仅仅只有一句话,begin end可以省略。

3.存储过程体中的每条sql语句的结尾要求必须加分号,存储过程的结尾可以使用delimiter重新设置。

4.存储过程不能修改。

语法:delimiter 结束标记

(二)调用语法

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

1.空参的存储过程

例:插入到admin表中五条数据

delimiter $
create procedure mypl()
begin
    insert into admin(username,'password')
    values('join1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
end $
call mypl();

2.带in模式参数的存储过程

例:创建存储过程实现,根据女神名,查询对应男神信息。

delimiter $
create procedure myp2(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 my2('rose')$

 例:创建存储过程实现,用户是否登陆成功。

delimiter $
create procedure myp3(in username varchar(20),in password varchar(20))
begin
    declare result int default 0;
    select count(*) into result
    from admin
    where admin.username=username and admin.password=password;
    select if(result>0,'成功','失败');
end $
call myp3('张飞','8888')$

3.带out模式参数的存储过程

例:根据女神名,返回对应的男生名和男神魅力值。

delimiter $
create procedure myp6(in beautyName vachar(20),out boyName varchar(20),out userCP omt)
begin 
    select bo.boyName,bo.userCP into boyName,userCP
    from boys bo
    inner join beauty b on bo.id=b.boyfriend_id
    where b.name=beautyName;
end $
call myp6('小昭',@bName,@usercp)$

4.带inout模式参数的存储过程

例:传入a和b两个值,最终a和b都翻倍并返回

delimiter $
create procedure myp8(inout a int,inout b int)
begin
    set a=a*2;
    set b=b*2;
end $
set @m=10$
set @n=20$
call myp8(@m,@n)$

(三)删除存储过程

语法:drop procedure 存储过程名;

一次只能删除一个存储过程。

(四)查看存储过程的信息

语法:show create procedure 存储过程名;

二、函数

(一)创建语法

create function 函数名(参数列表) returns 返回类型

begin

函数体

end;

注意:

1.参数列表包含两部分:参数名 参数列表。

2.函数体肯定会有return语句,如果没有会报错。

3.如果函数体仅仅只有一句话,begin end可以省略。

4.函数体中的每条sql语句的结尾要求必须加分号,函数的结尾可以使用delimiter重新设置。

(二)调用语法

语法:select 函数名(参数列表);

执行完语句后显示返回值。

(三)查看函数

语法:show create function 函数名;

(四)删除函数

语法:drop function 函数名;

存储过程和函数的区别:

存储过程:可以有0个返回,也可以有多个返回,适合批量插入,批量更新。

函数:有且仅有1个返回,适合做处理数据后返回一个结果。

发布了90 篇原创文章 · 获赞 48 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Asher_S/article/details/89609138
今日推荐