面试中有时候会问:存储过程有什么用?看了今天的知识,你就知道如何回答了。

1.存储过程是什么?

假如你每天要开车完成一些列重复的操作:车钥匙启动车,倒车。现在出现了一款新车,可以自动的完成这些重复的工作。每次你上车以后,车就自动帮助你倒出来了。

同样的,在工作里也会经常遇到重复性的工作,这时候就可以把常用的SQL写好存储起来,这就是存储过程。

这样下次遇到同样的问题,直接使用存储过程就可以了,就不需要再重新写一遍SQL了,这就极大的提高了工作效率。

2.如何使用存储过程?

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

(1)无参数的存储过程

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

create procedure 存储过程名称()begin  ;end;

语法里的begin...end用于表示sql语句的开始和结束。语法里面的就是重复使用的sql语句。下面通过一个例子看下如何使用。例如查出“学生表”里的学生姓名。

sql语句是:

select 姓名 from 学生表;

把这个sql语句放入存储过程的语法里,并给这个存储过程起个名字叫做就a_stuent1:

create procedure a_stuent1()begin select 姓名 from 学生表;end;

在navicat里允许以后,建立的存储过程就会在下图的地方:

下次使用存储过程的用下面sql语句就可以,就不需要重新写一遍sql了。

call 存储过程名称();

(2)有参数的存储过程

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

create procedure 存储过程名称(参数1,参数2,...)begin  ;end;

通过一个案例看下,现在要在“学生表”里查找出指定学号的学生姓名。如果指定学号是0001,那么sql语句是:

select 姓名 from 学生表where 学号='0001';

现在问题来了,一开始不知道指定学号是哪一个,只有使用的时候才知道业务需求。比如今天要查找学号0001,明天要查找学号002。这时候就需要用到参数,来灵活应对这种情况。把sql语句放入存储过程语法里就是:

create procedure getNum(num varchar(100))begin select 姓名 from 学生表where 学号=num;end;

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

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

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

call getNum(0001);

3)默认参数的存储过程

前面的存储过程名称后面是(参数1,参数2),括号里面只包含参数的类型和名字,方便调用。

存储过程还一种情况是有默认参数,是下面的语法。

in 输入参数:参数初始值在存储过程前被指定为默认值,在存储过程中修改该参数的值不能被返回

out输出参数:参数初始值为空,该值可在存储过程内部被改变,并可返回

inout输入输出参数:参数初始值在存储过程前被指定为默认值,并且可在存储过程中被改变和在调用完毕后可被返回

3.有哪些注意事项

1)定义存储过程语法里的SQL语句代码块必须是完整的sql语句,必须用“;”结尾

create procedure 存储过程名称(参数1,参数2,...)begin  ;end;

2)定义不同的存储过程,要使用不同的存储过程名称,相同的存储过程的名字会引起系统报错。

4.存储过程有什么用?

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

把重复要做的事情整理成一步一步的业务步骤,然后把业务步骤写成sql语句,然后再把sql语句写到存储过程的语法里。就像自动驾驶一样,把可能遇到的状况提前规划好,就不需要自己操纵方向盘,车子就按照我们写的步骤向前开了。

推荐:如何从零学会sql?

call 存储过程时必须声明表示符_图解面试题:SQL存储过程有什么用?相关推荐

  1. mysql纵表 主键_数据库面试题-sql语句

    原标题:数据库面试题-sql语句 1,写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的. 答: → 解1: select top ...

  2. mybatis mysql 调用存储过程 多个返回值_图解MyBatis的SQL执行流程(干货)

    前言 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下: 1.Mapper接口和映射文件是如何进行绑定的 2.MyB ...

  3. sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?

    [题目] 小明是一所学校的老师,她有一张 '学生表',平时用来存放座位号和学生的信息.其中,座位号是连续递增的.总的座位数是偶数. 现在,小明想改变相邻俩学生的座位.你能不能帮她写一个sql查来输出想 ...

  4. 求中位数_图解面试题:如何分析中位数?

    学校每次考试完,都会有一个成绩表.例如,表中第1行表示编号为1的用户选择了C++岗位,该科目考了11001分. 问题:写一个sql语句查询每个岗位的中位数位置的范围,并且按岗位升序排序,结果如下: 解 ...

  5. sql 大于某个日期_图解面试题:如何比较日期数据?

    [题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意思 ...

  6. sql 列求和_图解面试题:累计求和问题如何分析?

    [题目] "薪水表"中记录了员工发放的薪水.包含雇员编号,薪水.起始日期.结束日期. 其中,薪水是指该雇员在起始日期到结束日期这段时间内的薪水.当前员工是指结束日期 = '9999 ...

  7. oracle如何判断奇数偶数_图解面试题:如何分析中位数?

    学校每次考试完,都会有一个成绩表.例如,表中第1行表示编号为1的用户选择了C++岗位,该科目考了11001分. 问题:写一个sql语句查询每个岗位的中位数位置的范围,并且按岗位升序排序,结果如下: 解 ...

  8. sql server 中获取前一天日期_图解面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

  9. sql存储过程完全教程

    sql存储过程完全教程 目录 1.sql存储过程概述 2.SQL存储过程创建E2C~,x0@iC|4W7c*H 3.sql存储过程及应用)z,e1A{3o 4.各种存储过程使用指南A~k?/L cS` ...

最新文章

  1. 微软发布虚机管理SCVMM 2008 R2 RC版
  2. 2012需要分析的一些技术(1)
  3. 假设你有一个数组,其中第i 个元素是第i天给定股票的价格。设计算法以找到最大利润。你可以根据需要完成尽可能多的交易(即,多次买入并卖出一股股票)。注意:您不能同时进行多笔交易(即,您必须在再次购买之前
  4. 剑灵服务器延迟时间在哪看,怎么通过任务管理器看剑灵网络延迟
  5. 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下
  6. I00022 孙子定理
  7. Maya中AO贴图的一些烘焙心得
  8. vld检测不输出_原创干货 | 基于机器学习的webshell检测踩坑小记
  9. 计算机考试报名照片可以是白底吗,软考报名照片必须白底的是吗?
  10. LinkedList源码解析
  11. 美团到店Java二面:TCP 糊涂窗口综合症面试题汇总解析
  12. macbook linux 双系统,Mac双系统切换及设置技巧
  13. 苹果专用视频播放器Elmedia Video Player pro
  14. 互联网通信流程(含servlet)
  15. python2 与 python3 共存
  16. Qua Vadis Eclipse? 第二部分
  17. 计算机主机如何睡眠,win7怎样设置电脑休眠_w7电脑设置休眠的详细步骤
  18. JGG(IF 5.733)专刊征稿:人体微生物组
  19. python3 selenium模块Chrome设置代理ip的实现
  20. 小计 合计 总计 共计 怎么解释?

热门文章

  1. 移动端下弹框禁止背景滑动
  2. Nature:科学家首次实现肉眼可见的量子纠缠
  3. 使用Xamarin实现跨平台移动应用开发
  4. ICO取缔一锤定音,投资者、发起方、交易所如何处理后续风险,保障权益?
  5. 突破Android微信微博浏览器限制直接拉起应
  6. 创建用于云支持的枢纽
  7. Android 检查设备是否存在 导航栏 NavigationBar
  8. [控件] TranformFadeView
  9. haproxy Consistent Hash浅析
  10. 神经网络中的激活函数的比较