Oracle之PL/SQL游标练习题(三)
游标练习题目
- 1、定义游标:列出每个员工的姓名部门名称并编程显示第10个到第20个记录
- 2、定义游标:从雇员表中显示工资大于3000的记录,只要姓名、部门编号和工资,编程显示其中的奇数记录
- 3、用游标显示所有部门编号与名称,以及其所拥有的员工人数
- 4、用游标属性%rowcount实现输出前十个员工的信息
- 5、通过使用游标来显示dept表中的部门名称及其相应的员工列表(提示:可以使用双重循环)
- 6、接受一个部门号,使用For循环,从emp表中显示该部门的所有雇员的姓名,工作和薪水
- 7、编写一个程序块,将emp表中前5人的名字及其出的工资等级(salgrade)显示出来
- 8、emp表中对所有雇员按他们基本薪水的10%给他们加薪,如果所增加后的薪水大于5000,则取消加薪
- 9、按照salgrade表中的标准,给员工加薪,1:5%,2:4%,3:3%,4:2%,5:1%,并打印输出每个人加薪前后的工资
- 10、用游标获取所有收入超过2000的 salesman
1、定义游标:列出每个员工的姓名部门名称并编程显示第10个到第20个记录
法一:
declarecursor ed_cursor is select ename,dname from(select ename,dname,rownum r from emp e left join dept d on e.deptno=d.deptno)t where t.r between 10 and 20;v_ename varchar2(10);v_dname varchar2(10);
beginopen ed_cursor;fetch ed_cursor into v_ename,v_dname;while ed_cursor%found loopdbms_output.put_line(v_ename||' '||v_dname);fetch ed_cursor into v_ename,v_dname;end loop;close ed_cursor;
end;
法二:
declarecursor e_d is select * from(select e.ename,d.dname,rownum r from emp e,dept d where e.deptno=d.deptno)where r between 10 and 20;
beginfor e in e_d loopdbms_output.put_line(e.ename||','||e.dname);end loop;
end;
法三:
declarecursor e_d is select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
beginfor e in e_d loopif e_d%rowcount>=10 and e_d%rowcount<=20 thendbms_output.put_line(e.ename||','||e.dname);end if;end loop;
end;
2、定义游标:从雇员表中显示工资大于3000的记录,只要姓名、部门编号和工资,编程显示其中的奇数记录
法一:
declarecursor emp_cursor is select ename,deptno,sal from emp where sal>3000;v_ename varchar2(10);v_deptno number(10);v_sal number(10);
beginopen emp_cursor;fetch emp_cursor into v_ename,v_deptno,v_sal;while emp_cursor%found loopif emp_cursor%rowcount mod 2=1 thendbms_output.put_line(v_ename||' '||v_deptno||' '||v_sal);fetch emp_cursor into v_ename,v_deptno,v_sal;end if;end loop;close emp_cursor;
end;
法二:
declarecursor c_emp is select ename,deptno,sal from emp where sal>3000;
beginfor e in c_emp loopif mod(c_emp%rowcount,2)=1 thendbms_output.put_line(e.ename||','||e.deptno||','||e.sal);end if;end loop;
end;
3、用游标显示所有部门编号与名称,以及其所拥有的员工人数
法一:
declarecursor dept_cursor is select d.deptno,dname,count(*) from dept dleft join emp e on d.deptno=e.deptno group by d.deptno,dname;v_deptno number(20);v_dname varchar2(10);v_sum number(10);
beginopen dept_cursor;fetch dept_cursor into v_deptno,v_dname,v_sum;while dept_cursor%found loopdbms_output.put_line(v_deptno||' '||v_dname||' '||v_sum);fetch dept_cursor into v_deptno,v_dname,v_sum;end loop;close dept_cursor;
end;
法二:
declarecursor c_dept is select * from dept;v_n number:=0;
beginfor d in c_dept loopselect count(*) into v_n from emp where deptno=d.deptno;dbms_output.put_line(d.deptno||','||d.dname||',人数:'||v_n);end loop;
end;
4、用游标属性%rowcount实现输出前十个员工的信息
declarecursor c_emp is select * from emp;v_emp emp%rowtype;
beginopen c_emp;loopfetch c_emp into v_emp;exit when c_emp%notfound or c_emp%rowcount>10;dbms_output.put_line(v_emp.empno||','||v_emp.ename);end loop; close c_emp;
end;
5、通过使用游标来显示dept表中的部门名称及其相应的员工列表(提示:可以使用双重循环)
法一:
declarecursor dept_cursor is select dname,e.* from dept d left join emp e on e.deptno=d.deptno;v_dname varchar2(10);v_emp emp%rowtype;
beginopen dept_cursor;fetch dept_cursor into v_dname,v_emp.empno,v_emp.ename,v_emp.job,v_emp.mgr,v_emp.hiredate,v_emp.sal,v_emp.comm,v_emp.deptno;while dept_cursor%found loopdbms_output.put_line(v_dname||','||v_emp.empno||','||v_emp.ename||','||v_emp.job||','||v_emp.mgr||','||v_emp.hiredate||','||v_emp.sal||','||v_emp.comm||','||v_emp.deptno); fetch dept_cursor into v_dname,v_emp.empno,v_emp.ename,v_emp.job,v_emp.mgr,v_emp.hiredate,v_emp.sal,v_emp.comm,v_emp.deptno;end loop;close dept_cursor;
end;
法二:
declarecursor c_dept is select * from dept;--定义带参数的游标,根据提供的部门编号,去查询对应的员工列表cursor c_emp(dno emp.deptno%type) is select * from emp where deptno=dno;e emp%rowtype;
beginfor d in c_dept loopdbms_output.put_line('------部门名称:'||d.dname); open c_emp(d.deptno);--根据外层循环得到的部门编号去查询对应员工信息loopfetch c_emp into e;exit when c_emp%notfound;dbms_output.put_line(e.empno||','||e.ename);end loop; close c_emp;end loop;
end;
6、接受一个部门号,使用For循环,从emp表中显示该部门的所有雇员的姓名,工作和薪水
declarecursor emp_cursor is select * from emp where deptno=&deptno;
beginfor e in emp_cursor loopdbms_output.put_line(e.ename||','||e.job||','||e.sal);end loop;
end;
7、编写一个程序块,将emp表中前5人的名字及其出的工资等级(salgrade)显示出来
法一:
declarecursor es_cursor is select ename,sal,gradefrom(select ename,sal,rownum r from emp)e,salgrade swhere r<=5 and sal between losal and hisal;v_ename varchar2(10);v_sal number(10,2);v_grade number(2);
beginopen es_cursor;fetch es_cursor into v_ename,v_sal,v_grade;while es_cursor%found loopdbms_output.put_line(v_ename||', '||v_sal||', '||v_grade);fetch es_cursor into v_ename,v_sal,v_grade;end loop;close es_cursor;
end;
法二:
declarecursor c_e is select e.ename,s.grade,rownum from emp e,salgrade swhere e.sal between s.losal and s.hisal and rownum<=5;
beginfor e in c_e loopdbms_output.put_line(e.ename||','||e.grade); end loop;
end;
8、emp表中对所有雇员按他们基本薪水的10%给他们加薪,如果所增加后的薪水大于5000,则取消加薪
declarecursor cemp is select * from emp;
beginfor e in cemp loopif e.sal*1.1<=5000 thenupdate emp set sal=sal*1.1 where empno=e.empno;end if;end loop;
end;
9、按照salgrade表中的标准,给员工加薪,1:5%,2:4%,3:3%,4:2%,5:1%,并打印输出每个人加薪前后的工资
法一:
declarecursor es_cursor is select ename,sal,grade from emp e,salgrade s where sal between losal and hisal;v_ename varchar2(10);v_sal number(10,2);v_grade number(2);
beginopen es_cursor;fetch es_cursor into v_ename,v_sal,v_grade;while es_cursor%found loopdbms_output.put_line('加薪前: '||v_ename||', '||v_sal||', '||v_grade);case v_grade when 1 then v_sal:=v_sal*1.05;when 2 then v_sal:=v_sal*1.04;when 3 then v_sal:=v_sal*1.03;when 4 then v_sal:=v_sal*1.02;when 5 then v_sal:=v_sal*1.01;end case;dbms_output.put_line('加薪后: '||v_ename||', '||v_sal);update emp set sal=v_sal where ename=v_ename;fetch es_cursor into v_ename,v_sal,v_grade;end loop;close es_cursor;
end;
法二:
declarecursor emp_sal_cursor is select sal,empno from emp;v_sal emp.sal%type;v_id emp.empno%type;
beginopen emp_sal_cursor;fetch emp_sal_cursor into v_sal,v_id;while emp_sal_cursor%found loopdbms_output.put_line('加薪前: '||v_id || ': ' || v_sal);if v_sal between 700 and 1200 then v_sal:=v_sal+v_sal*0.05;elsif v_sal between 1201 and 1400 then v_sal:=v_sal+v_sal*0.04;elsif v_sal between 1401 and 2000 then v_sal:=v_sal+v_sal*0.03;elsif v_sal between 2001 and 3000 then v_sal:=v_sal+v_sal*0.02;else v_sal:=v_sal+v_sal*0.01;end if;update emp set sal=v_sal where empno=v_id;dbms_output.put_line('加薪后: '||v_id || ': ' || v_sal);fetch emp_sal_cursor into v_sal,v_id;end loop;close emp_sal_cursor;
end;
法三:
declarecursor emp_sal_cursor is select sal,empno from emp;temp number(4,2);
beginfor c in emp_sal_cursor loopdbms_output.put_line(c.empno||': '||c.sal);if c.sal between 700 and 1200 then c.sal:=c.sal+c.sal*0.05;elsif c.sal between 1201 and 1400 then c.sal:=c.sal+c.sal*0.04;elsif c.sal between 1401 and 2000 then c.sal:=c.sal+c.sal*0.03;elsif c.sal between 2001 and 3000 then c.sal:=c.sal+c.sal*0.02;else c.sal:=c.sal+c.sal*0.01;end if;dbms_output.put_line(c.empno||': '||c.sal);update emp set sal=c.sal where empno=c.empno;end loop;
end;
法四:
declarecursor c_e is select e.empno,e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;sal_1 emp.sal%type;--加薪前的工资sal_2 emp.sal%type;--加薪后的工资
beginfor e in c_e loopsal_1:=e.sal;case e.gradewhen 1 thensal_2:=e.sal*1.05;when 2 thensal_2:=e.sal*1.04;when 3 thensal_2:=e.sal*1.03;when 4 thensal_2:=e.sal*1.02;when 5 thensal_2:=e.sal*1.01;end case;update emp set sal=sal_2 where empno=e.empno;dbms_output.put_line(e.empno||','||e.ename||','||sal_1||','||sal_2);end loop;
end;
10、用游标获取所有收入超过2000的 salesman
法一:
declarecursor emp_cursor is select * from emp where (sal+nvl(comm,0))>2000 and job='SALESMAN';v_emp emp%rowtype;
beginopen emp_cursor;fetch emp_cursor into v_emp;while emp_cursor%found loopdbms_output.put_line(v_emp.empno||','||v_emp.ename);fetch emp_cursor into v_emp;end loop;close emp_cursor;
end;
法二:
declarecursor c_emp is select * from emp where (sal+nvl(comm,0))>2000 and job=upper('salesman');
beginfor e in c_emp loopdbms_output.put_line(e.ename);end loop;
end;
相关文章:
Oracle之PL/SQL游标练习题(三)
游标练习题目1、定义游标:列出每个员工的姓名部门名称并编程显示第10个到第20个记录2、定义游标:从雇员表中显示工资大于3000的记录,只要姓名、部门编号和工资,编程显示其中的奇数记录3、用游标显示所有部门编号与名称,…...

docker运行服务端性能监控系统Prometheus和数据分析系统Grafana
文章目录一、Prometheus的安装和运行1、使用docker拉取镜像2、创建prometheus.yml文件3、启动容器4、查看启动是否成功5、记录安装过程中出现的错误二、Grafana的安装和运行1、使用docker拉取镜像2、创建grafana3、运行grafana4、查看grafana运行日志5、登录grafana一、Prometh…...
【Linux】【应用层】多线程编程
一、线程创建 Linux 中的 pthread_create() 函数用来创建线程,它声明在<pthread.h>头文件中,语法格式如下: int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine) (void *),void *arg);各个参数…...
GameFramework 框架详解之 如何接入热更框架HybridCLR
一.前言 HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的c#热更新方案 GameFramework是一个非常出色完整的基于Unity引擎的游戏框架,里面包含了非常多的模块,封装非常完整。 以前市面上的热更大多数都是Lua为主,后来出了一个ILRuntime的C#热更框架,虽然性能…...

全国青少年软件编程(Scratch)等级考试二级考试真题2023年3月——持续更新.....
一、单选题(共25题,共50分) 1. 小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后,下列说法正确的是?( ) A.小猫一直在左右移动,嘴里一直说着“抓到了”。 B.小猫会碰到球,然后停止。 C.小猫一直在左右移动,嘴里一直说着“别跑” D.小猫会碰到球,…...

HTML2.1列表标签
列表标签种类 无序列表 有序列表 自定义列表 使用场景:在列表中按照行展示关联性内容。 特点:按照行的形式,整齐显示内容。 一、无序列表 标签名说明ul无序列表整体,用于包裹li标签li表示无序列表的每一项,用于包…...

在 Flutter 多人视频通话中实现虚拟背景、美颜与空间音效
前言 在之前的「基于声网 Flutter SDK 实现多人视频通话」里,我们通过 Flutter 声网 SDK 完美实现了跨平台和多人视频通话的效果,那么本篇我们将在之前例子的基础上进阶介绍一些常用的特效功能,包括虚拟背景、色彩增强、空间音频、基础变声…...
Ambari-web 架构
Ambari-web 使用的前端 Embar.js MVC 框架实现,Embar.js 是一个 TodoMVC 框架,涵盖了单页面应用(single page application)几乎所有的行为 Nodejs 是一个基于 Chrome JavaScript 运行时建立的一个平台,用来方便的搭建…...
对接百思买Best Buy EDI 的注意事项
在此前的文章:《Best Buy Drop Ship(Commerce hub) EDI业务测试常见报错及解决》中,我们介绍了在业务测试过程中遇到的常见报错及解决方案,以下在此基础上进行补充。 数据未能成功发送给Best Buy可能遇到的情况 Best Buy EDI项目传输业务报…...

2023年郑州重点建设项目名单公布,中创“算力数据中心”项目入选!
4月7日,郑州市人民政府网站公布2023年郑州市重点建设项目名单,名单共列项目680个,总投资1.08万亿元,年度计划投资2691亿元。 在创新驱动能力提升项目名单里,中创算力与人民网人民数据(国家大数据灾备中心&a…...
Pytorch 容器 - 1. Module类介绍
目录 1. 基于Module构建自己的网络 2. Module的初始化变量 3. Modules中需要子类 forward() 4. Modules中其他内置函数 1. 基于Module构建自己的网络 torch.nn.Module是所有神经网络模块的基类,如何定义自已的网络: 由于 Module 是神经网络模块的基…...
百度墨卡托坐标转化笔记
一、墨卡托坐标转化 调研了python和java多种实现方式的转换,发现有的不符合需求,原因还没找到。 我是用百度地图返回的poi边界(返回的是墨卡托坐标) 转换的原理没有深入研究,直接拿来用的,测试可行&…...

每日学术速递4.12
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.HC 随着新的“生成代理”论文的发布,LLM刚刚达到了一个重要的里程碑——通过使用 LLM,生成代理能够在受《模拟人生》启发的交互式沙箱中模拟类人行为。代理架构扩展…...
HarmonyOS/OpenHarmony公司级技术开发团队硬件基本配置清单
有朋友公司咨询进入HarmonyOS/OpenHarmony领域,组建技术团队,硬件设备的基本配置应该是怎么样的比较合适?这个是进入鸿蒙开发领域相关配置的第一步,我们以一个基本的团队配置为例说明,供想进入的团队参考。 HarmonyOS/…...

新一代信息技术赋能,安科瑞搭建智慧水务体系的新思路
随着新时期治水方针的逐步落实,水利现代化、智能化建设已开启,物联网、图像识别、数字孪生等新技术的成熟,也为智慧水务体系的搭建提供了技术保障,新时代治水新思路正逐步得到落实。本文对智慧水务的总体架构与包含的建设内容进行…...

37岁测试工程师被裁,120天没找到工作,无奈...
从短期来看,程序员的确算是个不错的工作,薪水也比一般岗位高很多,但是从长远来看,程序员的中年危机会比其他岗位来的更早,很多程序员只有到了35岁左右,才能真正认清楚互联网行业,尤其是被裁之后…...

Java容器使用注意点
前置:问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一:集合判空 《阿里巴巴 Java 开发手册》的描述如下: 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()0 的方式。 我们在开发中也…...
密文题解(图论+字典树)
题目大意 有一段长度为nnn的密文,密文的每一位都可以用一个非负整数来描述,并且每一位都有一个权值aia_iai。你可以操作任意多次,每次操作可以选择任意一段密文,花费选择的所有位上权值的异或和的代价获得这段密文每一位的异或…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK里的工具函数来计算工业相机的实时帧率(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来计算相机的实时帧率(C#)Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率计算方式在BufferEvent声明显示FrameID设计显示帧率的函数Baumer工业相机通过BGAPI SDK计算帧率的优势B…...
数据结构与常量(Java)
目录 1.字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 语法格式 补充:变量 int long short double和float char boolean byte 4.类型转换 类型提升小结 5. 字符串类型 1. int 转成 String 2. String 转成 int 1.字面常量 类似System.Out.p…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...