当前位置:   article > 正文

SQL教程——存储过程

SQL教程——存储过程

本教程中所使用的数据库的建表语句都在“SQL教程——索引”这篇文章中,点击链接直达:索引&建表语句

摘要:本文主要介绍SQL语法的存储过程

目录

存储过程和函数

存储过程

一、创建语法

二、调用语法

三、删除语法

四、查看存储过程信息


存储过程和函数

 

存储过程和函数:类似java中的方法

好处:

  1. 提高代码的重用性

  2. 简化操作

 

存储过程

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

 

一、创建语法

  1. create procedure 存储过程名(参数列表)
  2. begin
  3.     存储过程体(一组合法的SQL语句)
  4. end

注意:

1、参数列表包含三部分

参数模式    参数名    参数类型

举例:

in stuname varchar(20)

 

参数模式:

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

out:该参数可以作为输入,也可以作为返回值

inout:既可以作为输入又可以作为输出,也即该参数需要调用方传入值,又可以当成返回值

 

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

存储过程的每条SQL语句的结尾要求必须加分号。

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

语法:

delimiter 结束标记

 

 

 

二、调用语法

 

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

 

#1.空参列表

  1. #案例1:查处到admin表中5条数据
  2. delimiter $
  3. create procedure myp1()
  4. begin
  5.     insert into admin(username, 'password') values ('john1', '0000'), ('john1', '0000'), ('john1', '0000'), ('john1', '0000'), ('john1', '0000'),;
  6. end $
  7. #调用
  8. call myp1() $

 

#2.创建in模式参数的存储过程

  1. #案例1:创建存储过程,根据女神名,查询对应男神信息
  2. create procedure myp2(in beautyName varchar(20))
  3. begin
  4.     select bo.*
  5.     from boys bo
  6.     right join beauty b
  7.     on bo.id = b.boyfriend_id
  8.     where b.name = beautyName;
  9. end $
  10. #调用
  11. call myp2('柳岩')$

 

#3.创建out模式参数的存储过程

  1. #案例1:根据女神名,返回对应男神名
  2. create procedure myp3(in beautyName varchar(20), out boyName varchar(20))
  3. begin 
  4.     select bo.boyName into boyName
  5.     from boys bo
  6.     right join beauty b
  7.     on b.boyfriend_id = bo.id
  8.     where b.name = beautyName;
  9. end $
  10. set @bName = 3 $    #可以不写
  11. call myp3('赵敏', @bName) $
  12. select @bName $
  13. #案例2:根据女神名,返回对应男神名和男神魅力值
  14. create procedure myp4(in beautyName varchar(20), out boyName varchar(20), out userCP int)
  15. begin 
  16.     select bo.boyName,  bo.userCP into boyName, userCP
  17.     from boys bo
  18.     right join beauty b
  19.     on b.boyfriend_id = bo.id
  20.     where b.name = beautyName;
  21. end $
  22. #调用
  23. call myp4('小昭', @bName, @userCP);
  24. select @bName, @userCP;

 

#4.创建intout模式参数的存储过程

  1. #案例1:传入a和b两个值,最终a和b都翻倍并返回
  2. create procedure myp5(inout a int, inout b int)
  3. begin
  4.     set a = a * 2;
  5.     set b = b * 2;
  6. end $
  7. #调用
  8. set @a = 3$
  9. set @b = 4$
  10. call myp5(@a, @b)$
  11. select @a, @b$
  12. #Test1:创建存储过程实现传入用户名和密码,插入到admin表中
  13. create procedure newUser(in userName varchar(20), in password varchar(20))
  14. begin 
  15.     insert into admin(username, password) values(userName, password);
  16. end $
  17. #调用
  18. call newUser('肖航', '844940114')$
  19. select * from admin$
  20. #Test2:创建存储过程或函数实现传入女神编号,返回女神名称和女神电话
  21. create procedure searchBu(in beautyId int, out name varchar(20), out phone varchar(20))
  22. begin 
  23.     select b.name, b.phone into name, phone
  24.     from beauty b
  25.     where b.id = beautyId;
  26. end $
  27. #调用
  28. set @beautyId = 2$
  29. call searchBu(@beautyId, @name, @phone)$
  30. select @name, @phone$

 

 

三、删除语法

  1. drop procedure p1;
  2. drop procedure p1, p2;

 

 

四、查看存储过程信息

  1. desc myp2$ # XXX Table 'girls.myp2' doesn't exist
  2. show create procedure myp2$
  3. #Test3:创建存储过程或函数实现传入一个日期,格式化成xx年xx月xx日并返回
  4. create procedure dateToStr(in da date, out daStr varchar(20))
  5. begin 
  6.     select date_format(da, '%y年%c月%d日') into daStr;
  7. end$
  8. #调用
  9. set @da = curdate()$
  10. call dateToStr(@da, @daStr)$
  11. select @daStr$
  12. #Test4:创建存储过程或函数实现传入女神名称,返回:女神 AND 男神 格式的字符串
  13. create procedure sheHim(inout she varchar(20))
  14. begin    
  15.     declare him varchar(20);
  16.     select b.name, bo.boyname into she, him
  17.     from beauty b
  18.     left join boys bo
  19.     on b.boyfriend_id = bo.id
  20.     where b.name = she;
  21.     set she = concat(she, ' AND ', him);
  22. end $
  23. #调用
  24. set @she = '小昭'$
  25. call sheHim(@she)$
  26. select @she$

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号