PLSQL Day3

--7.键盘输入1-10之间的任意一个数字,输出这个数字的阶乘: [3!=1*2*3] [5!=1*2*3*4*5]
declare
  n number := &输入一个数字;
  s number := 1;
begin
  if n between 1 and 10
  then for i in 1..n loop 
          s := i*s;
       end loop;
  dbms_output.put_line(s);
  else
    dbms_output.put_line('请输入1-10之间的数');
  end if;
end;


--8.键盘输入一个deptno,将全部门的人的信息打印出来:
declare 
  no number := &部门号;
begin
  for e in (select * from scott.emp where deptno = no) loop
    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 loop;
end;

--9.键盘输入一个empno,将同部门的人的信息全部打印:

declare 
  no number := &员工号;
begin
  for e in (select * from scott.emp where deptno = (select deptno from emp where empno = no)) loop
    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 loop;
end;

--10.输出九九乘法表:
begin
  for m in 1..9 loop
    for n in 1..m loop
      dbms_output.put(n||'*'||m||'='||m*n||' ');
    end loop;   
    dbms_output.put_line(' ');
  end loop;
end;

--11.键盘输入用户模糊名字,查询符合条件的用户:

declare
  n varchar2(10) := '&模糊名字';
  a varchar2(50);
  b varchar2(50);
begin
  for i in 1..length(n) loop    
    a := '%'||substr(n,i,1); 
    b := b||a; 
  end loop;
  b := b||'%';
  for e in (select * from scott.emp where ename like b) loop
      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 loop;
end;


--12.三种循环打印emp表中的员工和入职日期:
-- for
begin
    for e in (select * from emp) loop
      dbms_output.put_line(e.ename||' '|| to_char(e.hiredate,'yyyy-MM-dd'));
    end loop;
end;
-- while
declare
  n number := 1;
  e_name varchar2(50);
  e_date varchar2(50);
  r number;
begin
  select count(*) into r from emp;
  while n <= r loop
      select t.ename,to_char(t.hiredate,'yyyy-MM-dd') 
      into e_name,e_date 
      from (select e.*,rownum r from emp e) t
      where t.r = n;
      dbms_output.put_line(e_name||' '|| e_date);
      n := n + 1;
  end loop;
end;
-- loop
declare
  n number := 1;
  e_name varchar2(50);
  e_date varchar2(50);
  r number;
begin
  select count(*) into r from emp;
  loop
      select t.ename,to_char(t.hiredate,'yyyy-MM-dd') 
      into e_name,e_date 
      from (select e.*,rownum r from emp e) t
      where t.r = n;
      dbms_output.put_line(e_name||' '|| e_date);
      n := n + 1;
      exit when n > r;
  end loop;
end;

-- 13.编写一个PL/SQL程序,用于接受用户输入的数字,
-- 将该数左右反转,然后显示反转后的数:(不使用反转函数)
declare
   n number := &输入一个数字;
   s varchar2(50);
begin
  for i in 1..length(n) loop
    s := s||substr(n,-i,1); -- substr 也可以直接切字符串
  end loop;
  dbms_output.put_line(s);
end;

-- 14.编写一个PL/SQL程序,用于接受用户输入的字符串,
-- 将该字符串左右反转,然后显示反转后的字符串:(不使用反转函数)
declare
   n varchar2(50) := '&输入一个字符串';
   s varchar2(50);
begin
  for i in 1..length(n) loop
    s := s||substr(n,-i,1);
  end loop;
  dbms_output.put_line(s);
end;

/*
create table nba(
  team varchar2(20),
  year number(4)
);
insert into nba values('活塞',1990);
insert into nba values('公牛',1991);
insert into nba values('公牛',1992);
insert into nba values('公牛',1993);
insert into nba values('火箭',1994);
insert into nba values('火箭',1995);
insert into nba values('公牛',1996);
insert into nba values('公牛',1997);
insert into nba values('公牛',1998);
insert into nba values('马刺',1999);
insert into nba values('湖人',2000);
insert into nba values('湖人',2001);
insert into nba values('湖人',2002); 
insert into nba values('马刺',2003);
insert into nba values('活塞',2004);
insert into nba values('马刺',2005);
insert into nba values('热火',2006);
insert into nba values('马刺',2007);
insert into nba values('凯尔特人',2008);
insert into nba values('湖人',2009);
insert into nba values('湖人',2010);  */

/*
请写出一条 SQL 语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下:

TEAM BEGIN END

公牛   1991   1993

火箭   1994   1995

公牛   1996   1998

湖人   2000   2002

湖人   2009   2010

*/

select * from nba;

-- 最优解
select team,min(t1y) begin ,max(t2y) end  from
(select t1.team,t1.year t1y,t2.year t2y from nba t1 , nba t2 
where t1.team = t2.team and t1.year+1 = t2.year)
group by team,(t1y-rownum)

--
with nb as(
select nba.team, nba.year,row_number()over( partition by team order by year) r,
year-row_number()over( partition by team order by year) q
 from nba)
select team,min(year) begin,max(year) end from nb
  group by team ,q having min(year)!=max(year) order by min(year);

select team,min(year) yearv,max(year)+1 yeari from(
select e.*,e.year-rownum aa from (select nba.team,nba.year,lead(nba.team) 
over(order by year)cc from nba) e
where e.team =e.cc) e1
group by team,aa 


-- 1.定义游标:列出每个员工的姓名、
-- 部门名称并编程显示工资正序第10个到第20个记录:

declare
  cursor e_cursor is
  select e.ename,d.dname from  emp e
  join dept d on d.deptno = e.deptno
   order by e.sal
  ;
  
  e e_cursor%rowtype;
begin
  -- loop
  open e_cursor;
    loop
      fetch e_cursor into e;
      exit when e_cursor%notfound;
      if e_cursor%rowcount between 10 and 20 then
         dbms_output.put_line(e.ename||' '||e.dname);
      end if;
    end loop;
  close e_cursor;
end;


declare
  cursor e_cursor is
  select e.ename,d.dname 
  from emp e join dept d
  on d.deptno = e.deptno
  order by sal;
  e e_cursor%rowtype;
begin
  open e_cursor;
  -- while
  --在循环体外进行一次fetch操作,作为第一次循环的条件
  fetch e_cursor into e;
  while e_cursor%found loop
    if e_cursor%rowcount between 10 and 20 
       then dbms_output.put_line(e.ename||' '||e.dname);
    end if;
    fetch e_cursor into e;
  end loop;   
  close e_cursor;
end;


declare
  cursor e_cursor is
  select e.ename,d.dname
  from emp e
  join dept d
  on e.deptno = d.deptno
  order by sal;
  
  e e_cursor%rowtype;
begin
  -- for
  for e in e_cursor loop
    if e_cursor%rowcount between 10 and 20 
       then dbms_output.put_line(e.ename||' '||e.dname);
    end if;
  end loop;
end;


-- 2.定义游标:从员工表中显示工资大于3000的记录,
-- 只要姓名、工资和部门编号。编程显示其中的奇数记录:
declare
  cursor e_cursor is 
  (select * from emp where sal >= 3000);
begin
  for x in e_cursor loop
    if mod(e_cursor%rowcount,2)=1
    then dbms_output.put_line(x.ename||' '||x.sal||' '||x.deptno);
    end if;
  end loop;
end;


 

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

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

相关文章

程序人生【追光的日子】今天我们不谈技术,谈一谈:人工智能的意义到底是什么?来看看今天分享的故事...我想我们都愿意相信,也许AI真的会有温度,这一天不远了~!

有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域…

Java SpringBoot MongoPlus 使用MyBatisPlus的方式,优雅的操作MongoDB

Java SpringBoot MongoPlus 使用MyBatisPlus的方式&#xff0c;优雅的操作MongoDB 介绍特性安装新建SpringBoot工程引入依赖配置文件 使用新建实体类创建Service测试类进行测试新增方法查询方法 官方网站获取本项目案例代码 介绍 Mongo-Plus&#xff08;简称 MP&#xff09;是一…

网络服务器配置与管理

网络服务器配置与管理是一个涉及多个方面的领域&#xff0c;它涵盖了从物理硬件的设置到操作系统、网络服务和应用的配置&#xff0c;再到日常维护和安全策略的实施。以下是网络服务器配置与管理的一些核心概念和步骤&#xff1a; 硬件配置&#xff1a; 选择合适的服务器硬件&a…

网站易被攻击原因及保护措施

网络攻击是指通过恶意手段侵犯网络系统的稳定性和安全性的行为。很多网站都成为黑客攻击的目标&#xff0c;因此对于网站管理员和网络用户来说&#xff0c;了解各种被攻击的方式以及如何解决是非常重要的。本文将介绍一些常见的网站攻击方式&#xff0c;并提供一些解决方案 1.…

基于docker上安装elasticSearch7.12.1

部署elasticsearch 首先&#xff0c;先创建网络 # 创建网络 docker network create es-net拉取elasticSearch的镜像 #拉取镜像 docker pull elasticsearch:7.12.1创建挂载点目录 # 创建挂载点目录 mkdir -p /usr/local/es/data /usr/local/es/config /usr/local/es/plugin…

智能决策的艺术:揭秘决策树的奇妙原理与实战应用

引言 决策树&#xff08;Decision Tree&#xff09;是一种常用的监督学习算法&#xff0c;适用于分类和回归任务。它通过学习数据中的规则生成树状模型&#xff0c;从而做出预测决策。决策树因其易于理解和解释、无需大量数据预处理等优点&#xff0c;广泛应用于各种机器学习任…

【SD教程】进阶篇图片复现AnimateDiff动画插件基础教程(附模型插件)

当你成功安装了SD&#xff08;Stable Diffusion&#xff09;后&#xff0c;是否也产生过这样的疑惑&#xff1a;为何我创作的图片与他人的作品在风格和质量上存在差异&#xff1f; 看着别人创作的精致、引人入胜的图片&#xff0c;你是否也渴望缩小这种质感上的差距&#xff1…

游戏AI的创造思路-技术基础-决策树(1)

决策树&#xff0c;是每个游戏人必须要掌握的游戏AI构建技术&#xff0c;难度小&#xff0c;速度快&#xff0c;结果直观&#xff0c;本篇将对决策树进行小小解读~~~~ 目录 1. 定义 2. 发展历史 3. 决策树的算法公式和函数 3.1. 信息增益&#xff08;Information Gain&…

深度解析:STM32对接米家平台,打造WiFi智能插座(ESP8266、电流检测)

摘要: 智能插座作为智能家居的入门级设备&#xff0c;凭借其低成本、易部署等优势&#xff0c;受到了广大用户的青睐。本文将引领你从零开始&#xff0c;使用功能强大的STM32微控制器、广受欢迎的ESP8266 WiFi模块以及功能丰富的米家IoT平台&#xff0c;一步步打造出一款能够远…

el-form rules动态限制

情景描述&#xff1a; el-form 的ref“obj” rules 对象obj有a,b,c三个字段&#xff0c;点击按钮a&#xff0c;a和b字段必填,点击按钮c,c字段必填&#xff0c;如何通过 this.$refs.obj.validate((valid)>{})去判断呢 <template><div><!-- 你的表单组件 --&g…

代码随想录-Day50

1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些…

【Linux】supervisor离线源码安装

一、安装meld wget https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz#md53ccc78cd79cffd63a751ad7684c02c91tar -zxvf meld3-1.0.2.tar.gz cd meld3-1.0.2 python setup.py install二、安装supervis…

Linux环境中安装JDK

1.下载安装包 可以通过访问oracle官网&#xff1a;Java Downloads | Oracle 中国 下载对应的安装包。 本文使用的是java8的安装包&#xff0c;包名为&#xff1a;jdk-8u401-linux-x64.tar.gz 2.上传安装包到Linux环境 3.进入/usr目录下&#xff0c;新建一个java的目录&#…

Python数据分析-欧洲经济聚类和主成分分析

一、研究背景 欧洲经济长期以来是全球经济体系中的重要组成部分。无论是在全球金融危机后的复苏过程中&#xff0c;还是在新冠疫情期间&#xff0c;欧洲经济的表现都对世界经济产生了深远的影响。欧洲各国经济体之间既存在相似性&#xff0c;也存在显著的差异。这些差异不仅体…

Linux下QT程序启动失败问题排查方法

文章目录 0.问题背景1.程序启动失败常见原因2.排查依赖库问题2.1 依赖库缺失2.2 依赖库加载路径错误2.3 依赖库版本不匹配2.4 QT插件库缺失2.4.1 QT插件库缺失2.4.2 插件库自身的依赖库缺失 2.5 系统基础C库不匹配 3.资源问题3.1 缺少翻译文件3.2 缺少依赖的资源文件3.3 缺少依…

Unity3D批量修改名称工具

介绍 该工具用于批量修改某游戏对象的一级子对象名称&#xff0c;功能包括批量添加前后缀、批量修改公共名称字段和批量修改为同一名称&#xff0c;包括撤销和恢复功能。 批量添加前后缀可使用预设从指定数字递增或递减至指定数字。 资源下载 GitHub 百度网盘&#xff08…

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈&#xff1a;SpringBootVueMybatis等使用环境&#xff1a;Windows10 谷歌浏览器开发环境&#xff1a;jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示

化工厂定位的意义?如何有效解决管理难题

化工厂定位是运用于工厂人员定位管理的新技术&#xff0c;这一技术的应用具有特殊的意义&#xff0c;和传统管理模式相比具有很大的区别&#xff0c;那么&#xff0c;你是否清楚化工厂定位的意义&#xff0c;它是如何有效的去解决工厂现存的管理难题呢? 传统化工厂管理到底有哪…

PySide6开发桌面程序,PySide6入门实战(上)

文章目录 系列文章索引一、前期准备1、简介及安装2、PyCharm PySide6环境搭建&#xff08;1&#xff09;基础环境&#xff08;2&#xff09;配置QT Designer、PyUIC、PyRCC&#xff08;3&#xff09;使用pyside6项目&#xff08;4&#xff09;资源文件编写与编译 二、QT常用控件…