sql 中位数_【PL/SQL 自定义函数】 常用场景

673913772e9468f1802590181d36f2ad.png

看完这章后你会学习到以下内容:

1.练习场景
2.面试场景
3.工作应用场景


总览思维导图:

a4720e1d1dd59ff6b39c58d16f57ef73.png

面试部分:
1.创建函数,从emp表中查询指定员工编号的职工的工资

 CREATE OR REPLACE FUNCTION CHECK_SAL(F_EMPNO IN EMP.EMPNO%TYPE) RETURN NUMBER ISV_SAL VARCHAR(50);BEGINSELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = F_EMPNO;  --- 直接调用隐式游标RETURN V_SAL;EXCEPTION WHEN NO_DATA_FOUND THEN     --- 异常值处理V_SAL:='没找到任何结果';RETURN V_SAL;END;--- 调用函数
SELECT CHECK_SAL(7499) AS 工资 FROM DUAL;

2.*创建函数,返回emp表中指定职工的工资和姓名。
返回值是两个,可用return返回一个,另一个用out参数带回

CREATE OR REPLACE FUNCTION F_EMP_SALENAME(FEMPNO IN EMP.EMPNO%TYPE,V_ENAME OUT EMP.ENAME%TYPE)RETURN NUMBER IS
V_SAL EMP.SAL%TYPE;
BEGINSELECT SAL,ENAME INTO V_SAL,V_ENAMEFROM EMPWHERE EMPNO = FEMPNO;RETURN V_SAL;END;--- 第一部分借用IN参数,返回其中一个SAL
--- 第二部分再重新定义一个OUT参数,不然程序不清楚要调用那个类型的参数DECLAREP_ENAME EMP.ENAME%TYPE;p_SAL EMP.SAL%TYPE;BEGINP_SAL:=F_EMP_SALENAME(7369,P_ENAME);      --- 定义一个Out参数返回function的返回值SalDBMS_OUTPUT.put_line('员工'||P_ENAME||'薪酬'||P_SAL);END;

3.创建函数,根据给定的部门编号(提示: 利用&)计算该部门所有职工的平均工资。

CREATE OR REPLACE FUNCTION F_INPUTEMPNO(F_DEPTNO IN DEPT.DEPTNO%TYPE)
RETURN NUMBER IS
V_SAL NUMBER;BEGIN SELECT AVG(SAL) INTO V_SAL FROM EMP WHERE DEPTNO = F_DEPTNO; RETURN V_SAL;
END;--- 调用时候,在输入名称前加入&,类似于VBA里的Input函数SELECT  F_INPUTEMPNO(&部门编号) AS 平均工资 FROM DUAL;

4.创建一个函数,仅有一个形参,它接收调用函数中传递过来的实参--部门号,函数的返回值为该部门的一整条记录信息.

CREATE OR REPLACE FUNCTION F_EMPINFO(F_DEPTNO IN DEPT.DEPTNO%TYPE)RETURN DEPT%ROWTYPE ISV_DEPT DEPT%ROWTYPE;BEGINSELECT * INTO V_DEPT FROM DEPT WHERE DEPTNO = F_DEPTNO;RETURN V_DEPT;END;DECLARE V_DEPT DEPT%ROWTYPE;BEGINV_DEPT := F_EMPINFO(20);   --- 传递参数给到调用函数时新定义得变量V_Dept;DBMS_OUTPUT.PUT_LINE('部门名: '||V_DEPT.DNAME || '  部门位置: ' || V_DEPT.LOC);END;

5*.创建函数,将emp表中工资低于平均工资的职工工资加上200,并返回修改了工资的总人数。注意:Update后面要加上Where语句否则全部都更新,其次我们善用%ROWCOUNT.

CREATE OR REPLACE FUNCTION F_MODIFY 
RETURN NUMBER 
IS
BEGINUPDATE EMP SET SAL=SAL+200 WHERE SAL<(SELECT AVG(SAL) FROM EMP);RETURN SQL%ROWCOUNT; /* sql%rowcount用于记录修改的条数,必须放在一个更新或者删除等修改类语句后面执行,select语句用于查询的话无法使用,当你执行多条修改语句时,按照sql%rowcount 之前执行的最后一条语句修改数为准。*/
END;
/
调用
BEGINDBMS_OUTPUT.PUT_LINE(F_MODIFY);
END; 
/

面试过程
1.输入2个整数,返回最小到最大数之间的连乘的结果(两个整数在1到20之间);
思路: 先对两个数进行范围的设置,用IF加AND判断。
然后两个数字一共三种可能:
A大于B,A小于B,A等于B 用IF Elsif 方式做条件判断。

CREATE OR REPLACE FUNCTION FUNB(P1 IN INT, P2 IN INT) RETURN INTEGER IS  --- 这两个的数据类型一定要一致V_RESULT INTEGER := 1;BEGINIF (P1 < 1 AND P1 > 20) AND (P2< 1 AND P2 > 20) THENIF P2 > P1 THENFOR I IN P1 .. P2 LOOPV_RESULT := V_RESULT * I;END LOOP;ELSIF P2 < P1 THENFOR I IN P2 .. P1 LOOPV_RESULT := V_RESULT * I;END LOOP;ELSEV_RESULT := P1 * P2;END IF;ELSE DBMS_OUTPUT.put_line('请输入正确的范围值');
END IF; RETURN V_RESULT;
END;

2.输入3个整数,取中位数。

--- 方法一	  CREATE OR REPLACE FUNCTION FUNA(P1 IN INT,P2 IN INT,P3 IN INT)RETURN INTEGER IS  V_RESULT INTEGER;BEGIN    SELECT CASE WHEN P1 >= P2 AND P1 <= P3 THEN  P1WHEN P2 >= P1 AND P2 <= P3 THEN  P2WHEN P3 >= P1 AND P3 <= P2 THEN  P3 ENDINTO V_RESULT FROM DUAL;RETURN V_RESULT;END;----- 方法二  
CREATE OR REPLACE FUNCTION FUN_middle(X1 IN NUMBER,X2 IN NUMBER,X3 IN NUMBER)RETURN numberIS BEGINIF (X1-X2)*(X1-X3)<=0   then return x1;elsif (x2-x1)*(x2-x3)<=0 then return x2;elsif(x3-x1)*(x3-x2)<=0 then return x3;end if;end;

3. 对比两个数,返回一个最大值。可以在设置参数时,顺带设置默认值

-- 传入两个参数,返回最大值CREATE OR REPLACE FUNCTION FUN_MAX (P_NUM1 IN NUMBER, P_NUM2 IN NUMBER DEFAULT 99)RETURN NUMBER    -- 函数的返回类型ISBEGINIF P_NUM1>P_NUM2 THEN RETURN P_NUM1;	ELSE RETURN P_NUM2; END IF;END;

3. 工作场景(一)
-- 函数返回类型为游标(对应报表接口)

-- 传入部门编号,返回整个部门的员工信息(函数)
CREATE OR REPLACE FUNCTION FUN_REF(P_DEPTNO EMP.DEPTNO%TYPE)RETURN SYS_REFCURSOR ISC_EMP SYS_REFCURSOR;BEGINOPEN C_EMP FOR   -- 不要忘记添加FORSELECT * FROM EMP WHERE DEPTNO = P_DEPTNO;RETURN C_EMP;END FUN_REF;-- 直接在Dual 表里直接调用SELECT FUN_REF(30) FROM DUAL;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以下python注释代码格式正确的是_Python文件头注释的含义,你肯定不懂

本文档描述了Python语言文件头里典型注释的含义。 1. 指定解释器 不管在linux还是在windows下&#xff0c;要运行一个python文件&#xff08;比如hello.py&#xff09;的方式一般都是 python ./hello.py 1 然而&#xff0c;有一种方式可以直接运行hello.py文件&#xff0c;那就…

python异步和进程_12.python进程\协程\异步IO

进程Python中的多线程无法利用多核优势 , 所以如果我们想要充分地使用多核CPU的资源 , 那么就只能靠多进程了multiprocessing模块中提供了Process , Queue , Pipe , Lock , RLock , Event , Condition等组件 , 与threading模块有很多相似之处1.创建进程from multiprocessing im…

swift date 计算差_[Swift 设计模式] 适配器

更多内容&#xff0c;欢迎关注公众号&#xff1a;Swift花园喜欢文章&#xff1f;不如来个 ➕三连&#xff1f;关注专栏&#xff0c;关注我 将一个不兼容的对象转换成目标接口或者类&#xff0c;这是适配器模式的作用。下面这件东西是适配器模式在现实世界中最贴切的表达。 USB-…

委外订单_听听晚报-英特尔扩大芯片委外订单、苹果秋季或举行两场发布会

英特尔扩大芯片委外订单据外媒报道称&#xff0c;美国半导体厂商英特尔已与中国台湾芯片制造厂商台积电达成协议&#xff0c;明年开始采用后者7nm的优化版本6nm制程量产处理器或显卡&#xff0c;预估投片量将达到18万片。该消息发出后&#xff0c;资本市场反应剧烈&#xff0c;…

ios系统可以使用python吗_4. 在苹果系统上使用 Python

4.1.获取和安装 MacPython Mac OS X 10.8 附带 Apple 预安装的 Python 2.7 。 如果你愿意&#xff0c;可以从 Python 网站&#xff08; https://www.python.org &#xff09;安装最新版本的 Python 3 。 Python 的当前“通用二进制”版本可以在 Mac 的新 Intel 和传统 PPC CPU …

打开另外一个页面_如何在PDF页面中插入图片?

如何给PDF添加图片&#xff1f;有些时候为了丰富PDF的文档内容&#xff0c;需要添加一些图片&#xff0c;相比Word或PPT文档可以直接插入图片&#xff0c;而PDF的操作很多人可能并不熟悉&#xff0c;下面一起来看看如何在PDF文档中插入图片。关于PDF文档插入图片分为两种情况&a…

spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合

1. 整合的工程结构首先我们来看下整合之后的工程结构是什么样的。2. 配置文件在于spring整合之前&#xff0c;mybatis都是自己管理数据源的&#xff0c;然后sqlSessionFactory是我们自己去注入的&#xff0c;现在整合了&#xff0c;这些都要交给spring来管理了&#xff0c;来看…

华三路由交换配置命令_华三路由器交换机配置命令

路由器:1、进入SETUP模式Router#setup2、时间设置router#clock set hh:mm:ss date moth year3、router>show historyRouter>terminal history size lines4、router#show version5、router#show running-config6、router#show starup-config7、router(config)#hostname na…

python中缩进_python编程中的缩进是什么意思

Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件&#xff0c;如果条件成立&#xff0c;则执行归属于if的一个代码块。 下面对比C语言来看一下if ( i > 0 ) { x 1; y 2; } 如果i > 0的话&#xff0c;我们将进行括号中所包括的两个…

返回后的数据处理_【掘金使用技巧2】掘金返回数据中时间的处理方法

掘金输出的时间数据处理方法掘金在为使用者提供数据时&#xff0c;有一类数据处理起来有些麻烦&#xff0c;这类数据就是时间数据。它们长这样&#xff1a;或者这样&#xff1a;查看一下它们的类型&#xff0c;发现有datetime,datetime64,Timestamp等等。这么多各种各样的类型&…

springboot jwt token前后端分离_为什么要 前后端分离 ?

作 者&#xff1a;互扯程序来 源&#xff1a;互扯程序广而告之&#xff1a;由于此订阅号换了个皮肤&#xff0c;系统自动取消了读者的公众号置顶。导致用户接受文章不及时。您可以打开订阅号&#xff0c;选择置顶(星标)公众号&#xff0c;重磅干货&#xff0c;第一时间送达&…

mysql优化模糊查询_MySQL的LIKE模糊查询优化

%xxx%这种方式对于数据量少的时候&#xff0c;我们倒可以随意用&#xff0c;但是数据量大的时候&#xff0c;我们就体验到了查询性能的问题&#xff0c;像老化的车子艰难趴着坡一样&#xff0c;并且这种方式并未使用到索引&#xff0c;而是全表扫描mysql 高效模糊查询 代替like…

分计算iv值_一文读懂评分卡的IV、KS、AUC、GINI指标

前言&#xff1a;当一张评分卡构建完成时&#xff0c;筛选出一组特征生成了分数&#xff0c;我们会想要知道这个分数是否靠谱&#xff0c;即是否可以依赖这个分数将好坏客户区分开来&#xff0c;这个时候就需要评判评分卡有效性的指标。测量评分卡好坏区分能力的指标有许多&…

mysql 层_mysql三层体系

为什么有连接池和线程池&#xff1f;每创建一个新的会话(或链接),mysql内部创建一个新的用户线程来提供服务,当连接被销毁,线程也被销毁.即一个连接有一个线程.这种创建链接和销毁链接都会消耗cpu性能.为了降低这种消耗,有了连接池和线程池.连接池(connection pool)&#xff1a…

react登录页面_React 实现路由拦截

接到个新项目&#xff0c;使用的是React&#xff0c;由于React没有属于自己的路由拦截方法&#xff0c;只有自己封装Route成高阶组件来实现&#xff0c;现记录下实现的方式&#xff1a;首先创建一个router文件&#xff0c;引入项目需要展示的组件 。export const routes [{pat…

mysql 严格模式查看,如何查找和禁用MySQL严格模式?

Hello everybody I wanted to find this mysql strict mode for whmcs and disable it but i didnt had a progressIm a newbie so sry if I didnt mention other thingsCan anyone help me?Im working on WHM/Cpanel解决方案To turn off (or on) mysql strict access from cp…

linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统

这段时间在学习python&#xff0c;接触到了网络编程中的socket这块&#xff0c;加上自己在用的Linux服务器都是原生支持python的&#xff0c;于是乎有了个做文件传输功能程序的想法。毕竟python语言中&#xff0c;有下载功能的框架一抓一大把&#xff0c;但是主机与主机间快速搭…

mysql gtid 备份恢复_MySQL基于gtid特性与xtrabackup的数据恢复

一、gtid特性介绍&#xff1a;GTID(global transaction identifier)是MySQL 5.6的新特性&#xff0c;可以唯一的标识一个事务&#xff0c;由UUIDTID组成&#xff1a;UUID是MySQL实例的唯一标识TID是该实例上已提交的事务的数量在主从复制中&#xff0c;GTID代替了classic的复制…

编码gbk的不可映射字符_Python基础:编码表和字符的故事

在计算机内部&#xff0c;都是每8位组成的一个个字节&#xff0c;比如我们使用"abc".encode()把abc转化成二进制byte类型&#xff0c;注意byte是不可变类型&#xff1a; 编码过程>>> abc.encode() # 把str字符变为bytes字节类型&#xff1b;字符是一个个连接…

java mysql数据库编程_java JDBC数据库(mysql)编程

什么是JDBC• JDBC(Java Data Base Connectivity,Java数据库连接)• 是一种用于执行SQL语句的Java API&#xff0c;为多种关系数据库提供统一访问• 它由一组用Java语言编写的类和接口组成JDBC访问数据库步骤• 1&#xff1a;加载一个Driver驱动要通过JDBC与数据库连接&#xf…