前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL存储过程有什么用?

SQL存储过程有什么用?

作者头像
陈学谦
发布2020-05-12 10:13:54
2K0
发布2020-05-12 10:13:54
举报
文章被收录于专栏:学谦数据运营学谦数据运营

今天稍微讲一下存储过程:

1.存储过程是什么?

假如你每天要开车完成一些列重复的操作:第一步拿出车钥匙,第二步开车,第三步侧位停车。现在出现了一款超牛逼的车,可以一键自动的完成这些重复的工作。每次你随便找个第二下车以后,车就自动帮助你车位停车到位了甚至,按一个按钮就能起飞了,你说爽不爽?

同样的,在工作中也会经常遇到很多重复性的工作,比如今天查小明考勤,明天查小红考勤,这时候就可以把常用的SQL写好存储起来,这就是存储过程。

这样下次遇到想查谁的考勤,直接使用存储过程就可以了,就不需要再重新写一遍SQL了,这就极大的提高了工作效率,美滋滋。

简单来说,就是定义一个函数,然后使用时调用。

2.那么,如何使用存储过程呢?

需要两步:1)先定义存储过程 2)使用已经定义好的存储过程。

存储过程可以有参数,也可以没有参数,我们分开来讲。

(1)没有参数的存储过程

定义存储过程的语法形式:

代码语言:javascript
复制
create procedure 存储过程名称()
begin 
<sql语句> ;
end;

begin...end表示sql语句的开始和结束,相当于一个说明。语法里面的<sql语句>就是重复使用的sql语句。下面通过一个例子看下如何使用。

例如我们要查出“销售表”里的销售员姓名。

sql语句是:

代码语言:javascript
复制
select 姓名 from 销售表;

我们将这个sql语句放入存储过程的语法里,起个名字叫a_salor1:

代码语言:javascript
复制
create procedure a_salor1()
begin 
select 姓名 from 销售表;
end;

在navicat里创建以后,就可以在函数的位置看到它了:

下次要使用存储过程的时候我们只要call一下这个存储过程就可以,就不需要重新写一遍sql了。

代码语言:javascript
复制
call 存储过程名称();

(2)有参数的存储过程

前面的存储过程名称后面是(),括号里面没有参数,是空的。当括号里面有参数时,我们使用下面的语法:

代码语言:javascript
复制
create procedure 存储过程名称(参数1,参数2,...)
begin 
<sql语句> ;
end;

我们通过一个案例看下,现在要在“销售表”里查找出指定编号的姓名。如果指定销售员编号是10086,那么sql语句是:

代码语言:javascript
复制
select 姓名 from 销售表 where 编号='10086';

那么现在问题来了,一开始不知道指定编号是哪一个,只有使用的时候才知道业务需求。比如今天要查找编号10010,明天要查找编号10086。这时候就需要用到参数,来灵活应对这种情况:

代码语言:javascript
复制
create procedure salornum(num varchar(100))
begin 
select 姓名 from 销售表 where 编号=num;
end;

其中salornum是存储过程的名称,后面括号里面的num varchar(100)是参数,参数由2部分组成:参数名称是num;参数类型是是varchar(100),这里表示是字符串类型。

存储过程里面的sql语句(where 编号=num)使用了这个参数num。这样在使用存储过程的时候,给定参数的值就可以灵活的按实际的业务需求来查询了。

比如现在要查询编号=911的销售员姓名,那么就在使用存储过程的参数中给出编号的值,也就是下面括号里的911:

call salornum(911);

这样是不是方便了许多?

3.有哪些注意事项

1)定义存储过程语法里的SQL语句代码块必须是完整的sql语句,而且必须用“;”结尾,一定要注意书写规范,否则一定会出错:

代码语言:javascript
复制
create procedure 存储过程名称(参数1,参数2,...)
begin 
<sql语句> ;
end;

2)定义不同的存储过程,要使用不同的存储过程名称,相同的存储过程的名字会引起系统报错。所有的表名、列名都是不能重复的。

4.存储过程有什么用?

如果业务比较复杂、重复性工作比较多,存储过程会比较实用。

不过像很多互联网公司,一般是不让使用存储过程的, 因为互联网公司的需求几乎天天都在变,不太可能有固定不变的模式让你天天按照相同的模板来操作的。但是对于大部分公司来说,存储过程在很大程度上能够帮助我们节省代码与时间。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档