当前位置: 首页 > news >正文

PLSQL Day4

--使用显式游标更新行,对所有salesman增加500奖金:
declare
  cursor s_cursor is
  select * from emp 
  where job = 'SALESMAN'
  for update;
begin
  for e_s in s_cursor loop
    update emp set comm = nvl(comm,0)+500 
    where current of s_cursor;
  end loop;
end;

--3.定义游标:显示所有部门编号与名称,以及其所拥有的员工人数:
declare
  cursor i_cursor is
  select d.deptno,d.dname,count(e.empno) cnt
  from dept d  left join emp e
  on d.deptno = e.deptno
  group by d.deptno,d.dname;
begin
  for e in i_cursor loop
    dbms_output.put_line(e.deptno||' '||e.dname||' '||e.cnt);
  end loop;
end;

--4.用游标属性%rowcount实现输出前十个员工的信息:

declare
  cursor a_cursor is
  select * from emp;
begin
  for e in a_cursor loop
    if a_cursor%rowcount < 11 
       then dbms_output.put_line(e.empno||' '||e.ename||' '||e.job
         ||' '||e.mgr||' '||to_char(e.hiredate,'yyyy-MM-dd')
         ||' '||e.sal||' '||e.comm
         ||' '||e.deptno);
    end if;
  end loop;
end;
--5.通过使用游标来显示dept表中的部门名称,
--及其相应的员工列表(提示:可以使用双重循环):
declare
  cursor a_cur is select * from dept;
  cursor b_cur is select * from emp;
begin
  for a in a_cur loop
    for b in b_cur loop
      if a.deptno=b.deptno then 
        dbms_output.put_line(a.dname||' '||b.empno||' '
        ||b.ename||' '||b.job||' '||b.mgr||
        ' '||to_char(b.hiredate,'yyyy-mm-dd')||' '
        ||b.sal||' '||b.comm);
      end if;
    end loop;
  end loop;
end;

--6.定义游标:接受一个部门号,从emp表中显示该部门的所有雇员的姓名,工作和薪水:
declare
  cursor c_cur(dno number) is select * from emp where deptno = dno;
begin
  for e in c_cur(&部门号) loop
    dbms_output.put_line(e.ename||' '||e.job||' '||e.sal);
  end loop;
end;

--7.定义游标:将emp表中前5人的名字,及其工资等级(salgrade)显示出来:
declare
  cursor d_cur is select e.ename,s.grade 
  from emp e join salgrade s
  on e.sal between s.losal and s.hisal;
begin
  for e in d_cur loop
    if d_cur%rowcount < 6
      then dbms_output.put_line(e.ename||' '||e.grade)  ;  
    end if;
  end loop;
end;


--8.定义游标:在emp表中对所有雇员按他们基本薪水的10%给他们加薪,
--如果所增加后的薪水大于5000,则取消加薪:

declare
  cursor e_cur is select * from emp for update;
begin
  for e in e_cur loop    
    e.sal := e.sal*1.1;
    if e.sal<=5000 then
       update emp set sal = sal*1.1 where current of e_cur;
    end if;
  end loop;
end;

select * from emp;
--9.按照salgrade表中的标准,给员工加薪,
--1:5%,2:4%,3:3%,4:2%,5:1%,
--并打印输出每个人,加薪前后的工资:

declare
  cursor f_cur is 
  select e.empno,e.ename,e.sal,s.grade 
  from emp e join salgrade s
  on e.sal between s.losal and s.hisal
  for update;
  e_sal number;
begin
  for e in f_cur loop
    if e.grade = 1 
    then e_sal := e.sal*1.05  ;        
    elsif e.grade = 2 
    then e_sal := e.sal*1.04  ;  
    elsif e.grade = 3 
    then e_sal := e.sal*1.03  ; 
    elsif e.grade = 4 
    then e_sal := e.sal*1.02  ;
    else e_sal := e.sal*1.01  ; 
    end if;
    dbms_output.put_line(e.ename||' - 前:'||e.sal||'  后:'||e_sal);
    update emp set sal = e_sal  
    where empno = e.empno;
  end loop;
end;

select * from emp;
select * from salgrade;


-----

declare
  cursor f_cur is select * from emp for update;
  cursor g_cur is select * from salgrade;
  e_sal number;  
begin
  for f in f_cur loop
    for g in g_cur loop
      if f.sal between g.losal and g.hisal and g.grade = 1
      then e_sal := f.sal * 1.05;
      elsif f.sal between g.losal and g.hisal and g.grade = 2
      then e_sal := f.sal * 1.04;   
      elsif f.sal between g.losal and g.hisal and g.grade = 3
      then e_sal := f.sal * 1.03;  
      elsif f.sal between g.losal and g.hisal and g.grade = 4
      then e_sal := f.sal * 1.02;   
      elsif f.sal between g.losal and g.hisal and g.grade = 5
      then e_sal := f.sal * 1.01; 
      end if; 
    end loop;
    dbms_output.put_line(f.ename||' - 前:'||f.sal||'  后:'||e_sal);
    update emp set sal = e_sal  where current of f_cur;
  end loop;
end;


--10.用游标获取所有收入(sal+comm)超过2000的 salesman:

declare
  cursor h_cur is select * from emp where sal+nvl(comm,0)>2000 and job = 'SALESMAN';
begin
  for h in h_cur loop
    dbms_output.put_line(h.empno||' '
        ||h.ename||' '||h.job||' '||h.mgr||
        ' '||to_char(h.hiredate,'yyyy-mm-dd')||' '
        ||h.sal||' '||h.comm||' '||h.deptno);
  end loop;
end;
--11.定义游标:按工号从小到大的顺序输出雇员名字、工资以及工资与所在部门平均工资的差额:

declare
  cursor i_cur is 
  select e.ename,e.sal,e.sal-t.avg c from emp e,
  (select deptno,round(avg(sal),2) avg from emp group by deptno) t 
  where t.deptno = e.deptno order by e.sal;
begin
  for i in i_cur loop
    dbms_output.put_line(i.ename||' '
        ||i.sal||' '||i.c);
  end loop;
end;

--12.定义游标:以提升两个资格最老的‘职员’(CLERK)为‘高级职员’(HIGHCLERK):(工作时间越长,优先级越高)

declare
  cursor j_cur is 
  select * from emp where job = 'CLERK' order by hiredate
  for update;
begin
  for j in j_cur loop
    if j_cur%rowcount < 3
      then
        update emp set job = 'HIGHCLERK' where current of j_cur;
    end if;
  end loop;
end;

select * from emp;
--13.使用显式游标更新行,删除薪资最低的那个员工:
declare
  cursor k_cur is select * from emp for update;
  min_sal number;
begin
  select min(sal) into min_sal from emp;
  for k in k_cur loop
    if k.sal = min_sal then
       delete from emp where current of k_cur;
    end if;
  end loop;
end;

----
declare
  cursor k_cur is select * from emp order by sal for update;
begin
  for k in k_cur loop
    if k_cur%rowcount = 1 then
       delete from emp where current of k_cur;
    end if;
  end loop;
end;

with soucre as ( 
    select 1 as id , 3 as score from dual
    union all 
    select 2 as id , 4 as score from dual
    union all 
    select 3 as id , null as score from dual
    union all 
    select 4 as id , 3 as score from dual
    union all 
    select 5 as id , null as score from dual
    union all 
    select 6 as id , null as score from dual
    union all 
    select 7 as id , 5 as score from dual) 
select t.id,
nvl(t.score,lag(t.score)over(order by t.id)) score 
from (
select s.id,
nvl(s.score,lag(s.score)over(order by s.id)) score 
from soucre s)t
    
-- 测试数据表创建
with soucre as ( 
    select 1 as id , 3 as score from dual
    union all 
    select 2 as id , 4 as score from dual
    union all 
    select 3 as id , null as score from dual
    union all 
    select 4 as id , 3 as score from dual
    union all 
    select 5 as id , null as score from dual
    union all 
    select 6 as id , null as score from dual
    union all 
    select 7 as id , 5 as score from dual) -- 测试数据表创建
select id,score,nvl(score,lag(score ignore nulls) over(order by id)) a from soucre;

/*create table customer(
cust_id number
,certificate_no char(18));
create table application(
apply_id number
,cust_id number
,amount number);
insert into customer values(1,370284199611045316);
insert into customer values(2,370284198011045316);
insert into customer values(3,370284196511045316);
insert into application values(11,1,700);
insert into application values(12,2,500);
insert into application values(13,3,200);*/
select * from customer;
select* from application;

select nvl(区间,'总计')区间,count(cust_id) 总人数,count(apply_id) 交易笔数,sum(amount)交易总金额 from(
select case when months_between(sysdate,d)/12 between 0 and 30 then '0-30岁' 
            when months_between(sysdate,d)/12 > 30 and months_between(sysdate,d)/12 <= 50 then '30-50岁'
            when months_between(sysdate,d)/12 > 50 then '50岁以上' end 区间,
cust_id,apply_id,amount from
(with t as
(select c.*,a.amount,a.apply_id from customer c,application a 
where a.cust_id = c.cust_id)
select cust_id,apply_id,to_date(substr(t.certificate_no,7,8),'yyyy-MM-dd') d,amount from t)
)group by rollup(区间);

------
with t as (select cust_id,apply_id,amount ,
            case when age between 0 and 30 then '0-30岁' 
            when age > 30 and age <= 50 then '30-50岁'
            when age > 50 then '50岁以上' end 区间
from (select c.cust_id,months_between(sysdate,to_date(substr(certificate_no,7,8),'yyyy-MM-dd'))/12 age,a.amount,a.apply_id 
from customer c,application a 
where a.cust_id = c.cust_id) 
)
select nvl(区间,'总计')区间,count(cust_id) 总人数,count(apply_id) 交易笔数,sum(amount)交易总金额 from t group by rollup(区间);
-----
with ca as
(select cust_id,amount,apply_id,
case when year between 0 and 30 then '0-30岁' 
     when year between 30 and 50 then '30-50岁'
     when year > 50 then '50岁以上'end age
from (select a.*,
to_char(sysdate,'yyyy')-substr(certificate_no,7,4) year
from customer c
join application a on c.cust_id=a.cust_id))
select nvl(age,'总计') 区间,count(cust_id) 总人数,count(*) 交易笔数,sum(amount) 交易总金额 
from ca group by rollup(age);


------------------------------------------------------------------------------------------------------------------

declare
  v_emp emp_bak%rowtype;
begin
  update emp_bak set comm=100 where deptno=&deptno;
  dbms_output.put_line('修改的数据条数:'||sql%rowcount);
  if sql%found then
    dbms_output.put_line('aaaaaaaaaaaaaaa');
  end if;
  delete from emp_bak where deptno=&dno;
  dbms_output.put_line('删除了'||sql%rowcount||'条数据'); 
end;

select * from emp_bak;
 

相关文章:

PLSQL Day4

--使用显式游标更新行&#xff0c;对所有salesman增加500奖金&#xff1a; declare cursor s_cursor is select * from emp where job SALESMAN for update; begin for e_s in s_cursor loop update emp set comm nvl(comm,0)500 where current of s_cur…...

git合并报错:git -c core.quotepath=false -c log.showSignature=false merge r

这个错误通常发生在 Git 尝试合并两个没有共同祖先的历史时&#xff0c;比如在合并不同的分支或仓库时&#xff0c;可以尝试以下几种方法&#xff1a; 允许不相关历史的合并: git merge release-3.6 --allow-unrelated-histories这个选项告诉 Git 允许合并两个没有共同历史的分…...

云原生存储:使用MinIO与Spring整合

在现代云原生应用开发中&#xff0c;高效、可靠的存储解决方案是至关重要的。MinIO是一个高性能、分布式的对象存储系统&#xff0c;它与Amazon S3兼容&#xff0c;非常适合在Kubernetes等云原生环境中使用。本文将详细介绍如何在Spring Boot应用中整合MinIO&#xff0c;并提供…...

等保测评新趋势:应对数字化转型中的安全挑战

随着信息技术的飞速发展&#xff0c;数字化转型已成为企业提升竞争力、优化运营效率的重要手段。然而&#xff0c;这一转型过程中&#xff0c;企业也面临着前所未有的安全挑战。等保测评&#xff08;信息安全等级保护测评&#xff09;作为保障信息系统安全的重要手段&#xff0…...

使用esptool工具备份ESP32的固件(从芯片中备份下来固件)

本文以Windows电脑为例 板子为esp32-c3 1下载python 可在官网中下载,此处不进行讲解 使用如下代码查看是否安装了 Python&#xff08;终端输入&#xff09; python 2下载esptool 在终端输入如下代码即可下载 使用 pip&#xff08;推荐&#xff09;: 在你已经安装的 Pyth…...

JS进阶-解析赋值

学习目标&#xff1a; 掌握解析赋值 学习内容&#xff1a; 解构赋值数组解构对象解构筛选数组filter方法&#xff08;重点&#xff09; 解构赋值&#xff1a; 解构赋值是一种快速为变量赋值的简洁语法&#xff0c;本质上仍然是为变量赋值。 分为&#xff1a; 数组解构对象解…...

Java虚拟机面试题汇总

目录 1. JVM的主要组成部分及其作用&#xff1f; 1.1 运行时数据区划分&#xff1f; 1.2 哪些区域可能会发生OOM&#xff1f; 1.3 堆和栈的区别&#xff1f; 1.4 内存模型中的happen-before是什么&#xff1f; 2. HotSpot虚拟机对象创建流程&#xff1f; 2.1 类加载过程…...

C++休眠的方法

Windows的API函数 Sleep(INFINITE); 休眠时间为永久 Linux的API函数sleep 没有直接表示无限时间的参数&#xff0c;根据POSIX标准&#xff0c;sleep() 函数的参数应该是 unsigned int 类型&#xff0c;因此最大可以接受的参数值是 UINT_MAX&#xff0c;即 4294967295 秒。sleep…...

选择排序(C语言版)

选择排序是一种简单直观的排序算法 算法实现 首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&#xff0c;然后放到已排序序列的末尾。 重复第二步&…...

基于CentOS Stream 9平台搭建FRP内网穿透

内网穿透方法很多&#xff0c;本文以github上很火的frp为例 1.frp官方 文档&#xff1a;https://gofrp.org/zh-cn/docs/overview/ 1.1 下载 https://github.com/fatedier/frp/releases 选中合适的版本 2. 服务端&#xff08;服务器&#xff09;搭建frps 需要公网IP服务器 选…...

Redis管理禁用命令

在redis数据量比较大时&#xff0c;执行 keys * &#xff0c;fluashdb 这些命令&#xff0c;会导致redis长时间阻塞&#xff0c;大量请求被阻塞&#xff0c;cpu飙升&#xff0c;严重可能导致redis宕机&#xff0c;数据库雪崩。所以一些命令在生产环境禁止使用。 Redis 禁用命令…...

RFID智能锁控系统在物流安全运输中的应用与效益分析

一、物流锁控系统现状与挑战 1.1 传统锁控系统的局限性 安全性不足&#xff1a;机械锁容易被撬开或钥匙被复制&#xff0c;导致货物在运输过程中面临被盗风险。 无法实时追踪&#xff1a;一旦货物离开发货点&#xff0c;物流公司无法实时监控货物状态&#xff0c;增加了货物…...

WPF设置全局样式

目的 创建一个资源字典&#xff0c;自动引入到各个Window或者UserControl中&#xff0c;可以随意使用。或者引入多个控件包&#xff0c;为了做兼容&#xff0c;保证可以引用多个控件库。 1. 定义资源字典 首先&#xff0c;你需要创建一个XAML文件来定义你的资源字典&#xf…...

【福利】代码公开!咸鱼之王自动答题脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序&#xff0c;进入答题界面&#xff0c;运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…...

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建技术

在过去几年中&#xff0c;人工智能领域的发展迅猛&#xff0c;尤其是大语言模型的应用&#xff0c;为各行各业带来了前所未有的创新与突破。从ChatGPT-3.5的推出到GPT Store的上线&#xff0c;再到最新的多模态交互ChatGPT-4o&#xff0c;OpenAI不断引领科技潮流&#xff0c;推…...

使用clion刷leetcode

如何优雅的使用clion刷leetcode 安装插件&#xff1a;LeetCode Editor) 插件配置&#xff1a; 这样我们每打开一个项目&#xff0c;就会创建类似的文件 我们的项目结构&#xff1a; 我们在题解文件中导入头文件myHeader.h并将新建的文件添加到cmakelists.txt文件&#xff0c;…...

图解HTTP(5、与 HTTP 协作的 Web 服务器 6、HTTP 首部)

5、与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站&#xff0c;也可作为通信路径上的中转服务器提升传输效率。 用单台虚拟主机实现多个域名 在相同的 IP 地址下&#xff0c;由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站&#xff0c;因此…...

JS之防抖和节流

防抖 (debounce) 所谓防抖&#xff0c;就是指触发事件后在 n 秒内函数只能执行一次&#xff0c;如果在 n 秒内又触发了事件&#xff0c;则会重新计算函数执行时间。 ps: 重置普攻&#xff0c;百度翻译要输完停止一定时间后才翻译。 没有防抖和节流的缺点&#xff1a; 函数触发…...

Open3D 点云PCA算法配准(粗配准)

目录 一、概述 1.1PCA配准的原理 1.2PCA配准的应用 二、代码实现 三、实现效果 3.1原始点云 3.2配准后点云 3.3变换矩阵 一、概述 PCA(Principal Component Analysis,主成分分析)是一种用于降维和特征提取的统计方法。在点云处理中,PCA可以用于点云配准(a…...

Transformer中的编码器和解码器结构有什么不同?

Transformer背后的核心概念&#xff1a;注意力机制&#xff1b;编码器-解码器结构&#xff1b;多头注意力等&#xff1b; 例如&#xff1a;The cat sat on the mat&#xff1b; 1、嵌入&#xff1a; 首先&#xff0c;模型将输入序列中的每个单词嵌入到一个高维向量中表示&…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具&#xff0c;成为众多网站运营者的必备选择。然而&#xff0c;面对市场上种类繁多的HTTPS证书&#xff0c;其一年费用究竟是多少&#xff0c;又受哪些因素影响呢&#xff1f; 首先&#xff0c;HTTPS证书通常在PinTrust这样的专业平…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理&#xff1a;检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;RankRAG&#xff1a;Unifying Context Ranking…...