Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
下面我们通过一些实战练习加深对存储过程和函数的认识
(1)以部门编号为输入参数,查询该部门的平均工资和人数
(2)以部门编号为输入参数,查询高出该部门平均工资的员工姓名
(3)检查当前操作是否在工作时间(周一到周五9:00~17:00)
分析:
因为 emp数据表中有3个部门,当输入部门编号的时候,可以把其当成存储过程的IN参数。
对干第一个要求,可以把存储过程中计算的平均工资和人数作为 OUT参数返回:对干第二个要求,
可以在程序体中实现内容的输出;对于第三个需求,可以不使用任何参数,直接在存储过程中进行判断。
下面依次来看一下如何实现。
(1)第一个存储过程因为需要查询指定部门的平均工资和人数,直接使用查询语句将查询结果传递给两个 OUT参数。
程序代码如下图所示。
如上图所示,首先定义一个IN 参数,用于接收调用时出入的部门编号,同时定义两个输出参数用于向调用传出结果。
在程序体中使用 INTO 子句把结果放到两个 OUT 参数中。
(2)由于要查询高出该部门平均工资的员工姓名,因此要使用复杂查询。
首先要查询平均工资,然后再给出高于平均工资的员工。
程序代码如下图所示。
如上图所示,首先定义一个 IN 参数,用于接收传送过来的部门编码,然后定义两个局部变量用于程序中存储平均工资和作为循环变量获取查询结果,
最后显示结果
(3)由于要根据查询时间确定操作情况,因此不需要传递参数,所以可以创建无参数的存储过程程序代码如下图所示
(1)以部门编号为输入参数,返回部门最高工资或最低工资
(2)以员工编号为输入参数,返回该员工的工资3)以员工编号为输入参数,返回其所在部门的平均工资
分析:
函数与储存过程的不同是函数具有返回值,这个范例中有3个功能,分别根据不同输入,返回指定结果,
可以定义输入IN 参数用干接收输入,然后将函数的类型定义为接收输出的类型。
具体实现如下所示。
(1)定义I 参数接收部门编号,再定义一个 IN 参数用于提供查询最高工资或最低工资的标志,同时定义函数输出类型用于存放工资。
程序代码如下图所示。
如上图所示,使用FLAG 标志来判断是返回最高工资还是返回最低工资,
然后在条件语句中将查询结果暂存到局部变量中,最后使用 RETURN 返回结果。
(2)这个实现起来更为简单,输入参数用于接收员工编号,然后在程序中查询对应的工资,
最后返程序代码如下图所示。
如上图所示,定义 IN 参数用于接收输入的员工编号,
然后在程序体中查询该编号员工的工资,并使用 RETURN 语句返回结果。
(3)这个比前两个要求复杂一些,应该首先查询出对应的部门编号,
然后再计算该部门的平均工资。程序代码如下图所示。
代码如上图所示,通过两步查询返回查询结果