首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >三十五、存储过程的基本使用

三十五、存储过程的基本使用

作者头像
喵叔
发布2021-06-29 11:34:45
发布2021-06-29 11:34:45
7990
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏
一、什么是存储过程

存储过程是为了完成特定功能的 SQL 语句集,经过编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参数来调用执行,类似于编程语言中的方法或函数。

1.1 存储过程的优点
  1. 存储过程是对 SQL 语句的封装,增强可复用性;
  2. 存储过程可以隐藏复杂的业务逻辑和商业逻辑;
  3. 存储过程支持接受参数,并返回运算结果。
1.2 存储过程的缺点
  1. 存储过程的可以执行差,如果更换数据库要重新存储过程;
  2. 存储过程难以调试和扩展;
  3. 无法使用 Explain 对存储过程进行分析。

存储过程的语法如下:

代码语言:javascript
复制
[delimiter 声明语句结束符]
create procedure 存储过程名称([存储过程参数])
begin
    sql 逻辑
end
[声明语句结束符]
[delimiter ;]
  1. 声明语句结束符一般用于sql 逻辑中如果有 ; 为结尾的sql语句,那么就需要使用delimiter 定义声明语句结束符。这样 MySQL 才能正确的找到存储过程正确的结束位置。
  2. 存储过程参数可以没有,如果存储过程需要返回值,那么就需要定义出参,如果存储过程需要从外部获得值就需要定义入参。

例如:

  1. 定义一个存储过程,计算两个数的和:
代码语言:javascript
复制
delimiter //
create procedure num_sum(in num1 int, in num2 int ,out result int)
begin
    set result=num1+num2;
end
//
delimiter ;

在这个存储过程中入参为 num1 和 num2 表示,需要在参数名前面加上 in 表示入参,参数名后面是参数类型。result 是出参,需要在参数名前面加上 out。调用这个存储过程使用 call 关键字:

代码语言:javascript
复制
call num_sum(10,20,@result);
select @result;

如果存储过程里需要定义变量,可使用 declare 关键字定义,个变量赋值使用 set 关键字:

代码语言:javascript
复制
delimiter //
create procedure num_sum_add2(in num1 int, in num2 int ,out result int)
begin
    declare n int ;
    set n=num1+num2;
    set result=n+2;
end
//
delimiter ;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是存储过程
    • 1.1 存储过程的优点
    • 1.2 存储过程的缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档