学习大数据DAY13 PLSQL基础语法2

news2024/9/20 16:24:02

目录

选择结构

IF语句

简单判断语句

带判断不成立语句

多判断语句

IF语句注意事项:

CASE 语句

简单CASE语句

搜索型CASE语句

作业

循环语句

循环结构

简单循环

属性

描述

位置

场景

WHILE循环

属性

FOR循环

数值型for循环

数值型for循环的特性

数值型for循环的规则

作业2

遗忘复习


PLSQL基础语法(二)

选择结构

改变程序的执行顺序

选择一个结果

条件为bool类型,只能选择一个执行,

if和case两种

if结构,if、 if else、多重if

case结构,简单case、 搜索case

可以随意嵌套,两种方法都可以互相实现,选择更适合的方法实现

IF语句

简单判断语句

if 条件表达式 then plsql语句; end if;

带判断不成立语句

if 条件表达式 then 条件成立时执行的语句;

else 条件不成立时执行的语句; end if;

多判断语句

if 条件表达式1 then 条件1成立时执行的语句;

elsif 条件表达式2 then 条件2成立时执行的语句;

... elsif 条件表达式n then 条件n成立时执行的语句;

else 所有条件都不成立时执行的语句;

end if;

IF语句注意事项:

在IF语句中的三种格式中,都必须使用关键字 end if来结束,并且中间需要有一个空

格。

关键字elsif 中没有字母E

整个if 语句中只在end if后存在分号;而之前的if 、then、else 、elsif 中都没有分号

当判断if以及else 、elsif 中的同时有两个以上返回true,也只会执行第一个语句。

当我们遇到一个plsql语句不需要我们做任何事时,就可以使用null语句来填充。系统运行

到null语句后会自动向下继续运行而不是中断执行。

null语句格式:null;

当遇到if语句必须要跟一个执行语句的情况时,就可以在后面写入null ;或者在标签后写

入null来跳转到程序的最后完成运行。

declare

sex varchar2(10):='&sex';

begin

if sex='女' then dbms_output.put_line('小糯米');

else dbms_output.put_line('周杰伦');

end if;

end;

declare

sex varchar2(10):='&sex';

begin

if sex='女' then dbms_output.put_line('小糯米');

elsif sex='男' then dbms_output.put_line('周杰伦');

else dbms_output.put_line('人妖');

end if;

end;

 --输入性别和时间,女并且小于10秒为冠军

declare

sex varchar2(10):='&sex';

run number(2):=&run;

begin

if sex='女' then dbms_output.put_line('小糯米');

if run<10 then dbms_output.put_line('冠军');

end if;

elsif sex='男' then dbms_output.put_line('周杰伦');

else dbms_output.put_line('人妖');

end if;

end;

CASE 语句

简单CASE语句

case 表达式

when 匹配值 then 执行语句

when 匹配值 then 执行语句

......

else 执行语句

end case;

搜索型CASE语句

case

when 表达式 then 执行语句

when 表达式 then 执行语句

......

else 执行语句

end case;

一旦满足其中一个条件并执行语句后,整个case语句就完成了。else是可选的,如果没有

那么抛出case_not_found 异常,when表达式是按照从上到下依次执行.

在plsql语句中也可以单独使用sql语句中的case表达式进行处理,在case表达式中只返回

一个单独的值用于后续处理使用。

declare

week number(4):=6;

begin

case week

when 6 then

dbms_output.put_line('休息');

when 7 then

dbms_output.put_line('休息');

else

dbms_output.put_line('干活');

end case;

end;

declare

week number(4):=6;

begin

case

when week>5 then

dbms_output.put_line('休息');

else

dbms_output.put_line('干活');

end case;

end;

作业

--1.输入两个数字判断两个数字的大小

declare

a number(6,3):=&输入a的值;

b number(6,3):=&输入b的值;

begin

  if a>b then dbms_output.put_line('a更大');

  elsif b>a then dbms_output.put_line('b更大');

  else dbms_output.put_line('都挺大的');  

  end if; 

  end;

--2.输入一个数字输出这个数字是偶数还是奇数

declare

n number(4):=&输入一个数字判断奇偶;

begin

  if mod(n,2)=0 then dbms_output.put_line('这是偶数');

  else dbms_output.put_line('这是奇数');

  end if;  

  end;

--3.判断一个日期是否是星期六或星期日,休息日则开耍,上班日则搬砖

declare

DayTime date:=to_date('&输入一个日期,精确到日','yyyymmdd');

begin

  if to_char(DayTime,'day')='星期六'

    or to_char(DayTime,'day')='星期日'

     then dbms_output.put_line('这天是休息日,开耍!');

     else dbms_output.put_line('搬砖'); 

       end if;

  end;

/*4.判断一个年份是否是闰年,400整除是世纪闰年,100不整除并且被4整除是闰年,其余

是平年*/

declare

ryear number(5):=&输入一个年份;

begin

  if mod(ryear,400)=0 or mod(ryear,100)!=0 and mod(ryear,4)=0

    then dbms_output.put_line('这个年份是闰年');

    else dbms_output.put_line('这个年份是平年');  

    end if;

  end;

/*5.请输入一个员工编号,如果是10号部门则员工上调工资10%,如果是20号部门则工资

上调20%,如果是30号部门则工资上调30%*/

declare

sempno emp.empno%type:=&请输入一个员工编号,根据其部门号涨薪;

dempno emp.deptno%type;

begin

  select distinct deptno into dempno from emp

  where empno=sempno;

  if dempno=10

    then update emp set sal=sal*1.1

      where empno=sempno;

    elsif dempno=20

      then update emp set sal=sal*1.2

         where empno=sempno;

      elsif dempno=30

        then update emp set sal=sal*1.3

           where empno=sempno;

        else dbms_output.put_line('该员工不存在或没有涨薪资格!');

        end if; 

  end;

--6.输入三个数,不考虑相等,有小到大打印输出

create table AbcNumber(

sNumber number(6,3));--建一个表

declare

a AbcNumber.sNumber%type:=&输入数值a;

b AbcNumber.sNumber%type:=&输入数值b;

c AbcNumber.sNumber%type:=&输入数值c;

roww number(20);--装载排名最小值

maxroww number(20);--装载排名最大值

ABC AbcNumber.sNumber%type;--将数据逐个装入并输出用的参数

begin

  insert into AbcNumber values(a);

  insert into AbcNumber values(b);--将数据插入表中一列

  insert into AbcNumber values(c); 

  select r into roww from(

  select row_number()over(order by sNumber asc) r from AbcNumber

  ) where r=1;--装载排名最小值

  select max(r) into maxroww from(

  select row_number()over(order by sNumber asc) r from AbcNumber

  );--装载排名最大值

  for i in roww .. maxroww--将数据逐个装入并输出

    loop

      select sNumber into ABC from(

      select sNumber,row_number()over(order by sNumber asc) r from AbcNumber )

      where r=i; 

      dbms_output.put_line(ABC);

      end loop; 

  end;


选择结构语句判定示意图:

循环语句

循环具备的两个条件:循环条件和循环操作

条件为bool类型,plsql的循环能够让一段代码反复执行,为实现这一功能一共提供了三

种不同的循环结构:

loop简单循环或无限循环,其他语言叫do while

for循环

while循环

循环结构

三种循环各有差异但每个结构都包含两个部分:循环边界以及循环体。循环边界有一些

保留词组成,包括初始化循环、终止循环条件、完成循环的 end loop 语句。

循环结构和选择结构随意嵌套,同一功能可以互相实现,选择合适的方法

简单循环

以loop开始到end loop结束的循环结构。靠循环体中exit、exit when。

简单循环的特性:

属性
描述

结束循环语句

简单循环通过exit语句或者 exit when 语句结束循环

结束循环语句

位置

结束循环语句放置在循环体内,该语句需要至少被执行一次,不然就

会变成无限循环。

简单循环使用

场景

当不能确认循环需被执行次数时使用或者保障循环体至少被执行一次

时使用。

--简单循环

declare

n number :=0;--初始值

begin

loop

n:= n+1;--自增

dbms_output.put_line(n);

exit when n>=10 ; --停止条件

end loop;

end;

WHILE循环

while循环时一个条件循环,只要循环边界处定义的布尔条件的值为真,循环就会继续。

while循环的的格式:

while 条件判断

loop

执行语句

end loop;

while循环的特性:

属性

循环结束语句当循环边界的布尔表达式为false 或者null时循环结束。

结束循环语句位置

结束循环语句放在while关键字后,在循环体要执行前进行判断,所以

while循环可能一次都不会执行循环体。

while循环使用场景

无法明确循环体会循环几次,但有明确的循环停止条件,并且循环体

不是一定要执行的情况使用 while循环。 

--while循环

declare

n number :=0;--初始值

begin

while n<10 --停止条件

loop

n:= n+1;--自增

dbms_output.put_line(n);

end loop;

end;

FOR循环

for循环有两种类型:数值型for循环和游标型for循环。数值型for循环的循环次数在循环开始时已经确认,而游标型for循环是和select语句关联在一起循环。

数值型for循环

数值型for循环格式:

for 循环索引 in [reverse] 小数值 .. 大数值

loop

循环体

end loop;

数值型for循环的特性

数值型for循环的规则

1、不需要对循环索引进行变量声明,系统会自动隐式声明一个integer数据类型的变量。

2、在范围部分使用算式会在循环开始时进行求值一次,且不会随着循环的反复执行被重复求值。如果在循环体中改变了范围表达式的变量也不会对范围表达式的值产生影响

3、使用reverse进行递减循环时不需要将大数值和小数值进行颠倒输入依然先小再大表示。 

--for循环

begin

for n in 1..10

loop

dbms_output.put_line(n);

end loop;

end ;

begin

for n in reverse 1..10

loop

dbms_output.put_line(n);

end loop;

end ;

--配合函数的for循环

declare

str varchar2(100);

endstr varchar2(100);

begin

str:='两只老虎';

for n in 1 .. length(str)

loop

endstr :=substr(str,n,1)||endstr;

end loop;

dbms_output.put_line(endstr);

end;

作业2

--1、写一个循环,输出20-40

begin

  for i in 20 .. 40

    loop

      dbms_output.put_line(i); 

      end loop;

  end;

--2、从1-50的单数,倒序

begin

  for i in reverse 1 .. 50

    loop

      if mod(i,2)!=0

        then dbms_output.put_line(i);

        end if;

        end loop;

        end; 

--3、输出a-z

begin

  for i in ascii('a') .. ascii('z')

    loop

    dbms_output.put_line(chr(i));

    end loop;

    end; 

--4、计算并显示 1 到 100 之间的奇数之和

declare

jsum number(9):=0;

begin

  for i in 1 .. 100

    loop

      if mod(i,2)!=0

        then jsum:=jsum+i;

        end if;

      end loop;

      dbms_output.put_line(jsum); 

  end;

--5、倒序功能,输入我爱你你爱我蜜雪冰城甜蜜蜜,打印倒序输出

declare

HoneySnowIceCity varchar2(50):='&输入我爱你你爱我蜜雪冰城甜蜜蜜';

begin

  for i in 1 .. length(HoneySnowIceCity)

    loop

      dbms_output.put(substr(HoneySnowIceCity,-i,1)); 

      end loop;

      dbms_output.put_line(null); 

  end;

/*6、有若干只鸡兔同在一个笼子里,从上面数有35个头,从下面数有94只脚。问笼中各有多少只鸡和兔?*/

declare

Chicken number(4);

Rabbit number(4);

begin

  for Chicken in 0 .. 35

    loop

      Rabbit:=35-Chicken;

      if (2*Chicken+Rabbit*4)=94

        then dbms_output.put_line('笼中有'||Chicken||'只鸡和'||Rabbit||'只兔'); 

        end if; 

      end loop;

  end;

/*7、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。*/

declare

peach number(5):=1;

begin

  for i in reverse 1 .. 9

    loop

      peach:=2*(peach+1);

      end loop;

      dbms_output.put_line('第一天摘了'||peach||'个桃子'); 

  end;

遗忘复习

If 判定等号为=,不是:=。

Ascii()字符转ascii码,chr()ascii码转字符。

instr(字符串,寻找字符,开始寻找位置,寻找出现的第几个该字符)

示例:instr(aaabbccc,b,1,1) 返回4.

Instr(aaabbbbbccc,b,5,4) 返回8.

找不到返回0.

Substr(字符串,开始截取位置,最后截取位置(不写则后面都截取))

mod(n,m)求n除以m的余数

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

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

相关文章

如何将若依vue升级到springboot3.x?

为了确保项目符合要求,Spring Boot 3.x 要求Java版本为17或更高。 1、修改根目录下的pom.xml文件 <!-- java.version版本8更换为17 --> <java.version>17</java.version><!-- 新增节点 --> <mybatis-spring-boot.version>3.0.3<

手撸俄罗斯方块(四)——渲染与交互

手撸俄罗斯方块&#xff08;四&#xff09;——渲染与交互 如何渲染游戏界面 我们知道&#xff0c;当我们看到页面先呈现图像时&#xff0c;实际上看到的是一张图片&#xff0c;多张图片按照一定的刷新频率进行切换&#xff0c;则变成了动态的视频。当刷新频率超过24Hz时&…

PDF 分割拆分 API 数据接口

PDF 分割拆分 API 数据接口 文件处理&#xff0c;PDF 高效的 PDF 分割工具&#xff0c;高效处理&#xff0c;可永久存储。 1. 产品功能 高效处理大文件&#xff1b;支持多语言字符识别&#xff1b;支持 formdata 格式 PDF 文件流传参&#xff1b;支持设置每个 PDF 文件的页数…

Java面试八股之Redis单线程为什么性能高

Redis单线程为什么性能高 1.内存数据库特性 要点&#xff1a;Redis是一个内存数据库&#xff0c;其数据主要存储在内存中&#xff0c;而非磁盘。内存访问的速度远超磁盘&#xff0c;通常可达纳秒级别&#xff0c;这使得Redis在处理数据时几乎不受I/O瓶颈的影响。由于数据操作…

【机器学习理论基础】回归模型定义和分类

定义 回归分析是研究自变量与因变量之间数量变化关系的一种分析方法&#xff0c;它主要是通过因变量 Y Y Y与影响它的自变量 X i X_i Xi​ 之间的回归模型&#xff0c;衡量自变量 X i X_i Xi​ 对因变量 Y Y Y 的影响能力的&#xff0c;进而可以用来预测因变量Y的发展趋势。…

7.10日学习打卡----初学Redis(五)

7.10日学习打卡 目录&#xff1a; 7.10日学习打卡一. redis功能流水线pipeline什么是流水线&#xff1f;pipeline实现使用pipeline 发布与订阅Redis的发布与订阅发布订阅命令行实现 慢查询Redis命令执行的整个过程如何进行配置实践建议 二 . redis的持久化机制RDB持久化机制触发…

[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)

最新消息ICVISP 2024-已通过ACM出版申请投稿免费参会&#xff0c;口头汇报或海报展示(可获得相应证明证书) ————————————————————————————————————————— [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVI…

传感器标定(三)激光雷达外参标定(lidar2ins)

一、数据采集 1、LiDAR 传感器的 LiDAR PCD 数据 2、来自 IMU 传感器的姿势文件 3、手动测量传感器之间外部参数初始值并写入的 JSON 文件 二、下载标定工具 //总的git地址&#xff1a; https://github.com/PJLab-ADG/SensorsCalibration git地址&#xff1a; https://githu…

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法&#xff0c;用于研究因变量和自变量之间的关系。在机器学习中&#xff0c;回归算法被广泛应用于…

从零开始的python学习生活2

接上封装 class Phone:__volt0.5def __keepsinglecore(self):print("让cpu以单核运行")def if5G(self):if self.__volt>1:print("5G通话已开启")else:self.__keepsinglecore()print("电量不足&#xff0c;无法使用5G通话&#xff0c;已经设置为单…

【NLP学习笔记】transformers中的tokenizer切词时是否返回token_type_ids

结论 先说结论&#xff1a; 是否返回token_type_ids&#xff0c;可以在切词时通过 return_token_type_idsTrue/False指定&#xff0c;指定了True就肯定会返回&#xff0c;指定False&#xff0c;不一定就不返回。 分析 Doc地址 https://huggingface.co/docs/transformers/main…

MATLAB | 如何使用MATLAB优雅的推公式,全网最全MATLAB符号表达式使用教程

HEY&#xff0c; 各位这次是真的好久不见&#xff0c;本期推送来教大家如何使用MATLAB推公式并使用推出来的结果。 本文说白了就是讲符号表达式这个东西咋用&#xff0c;所使用最重要的函数就是syms&#xff0c;在开始前&#xff0c;首先要保证自己的MATLAB安装了Symbolic Mat…

【Pytorch】RNN for Image Classification

文章目录 1 RNN 的定义2 RNN 输入 input, h_03 RNN 输出 output, h_n4 多层5 小试牛刀 学习参考来自 pytorch中nn.RNN()总结RNN for Image Classification(RNN图片分类–MNIST数据集)pytorch使用-nn.RNN 1 RNN 的定义 nn.RNN(input_size, hidden_size, num_layers1, nonlinea…

特斯拉的人形机器人最新展示,穿戴遥操作示教的机器人学习!

在机器人领域&#xff0c;特斯拉的人形机器人一直备受关注。2021 年&#xff0c;在「特斯拉 AI 日」上&#xff0c;马斯克发布了特斯拉的通用机器人计划&#xff0c;并用图片展示了人形机器人 Tesla Bot 的大致形态。但当时的 Tesla Bot 只是个概念&#xff0c;动作展示部分是由…

C++基础学习笔记

1.命名空间(namespace) 1.什么是命名空间&命名空间的作用 1.在C/C中&#xff0c;变量、函数、类都是大量存在的&#xff0c;这些变量等的名称将都存在于全局作用域中&#xff0c;就会导致很多的命名冲突等。使用命名空间的目的就是对标识符的名称进行本地化&#xff0c;以…

springboot中通过jwt令牌校验以及前端token请求头进行登录拦截实战

前言 大家从b站大学学习的项目侧重点好像都在基础功能的实现上&#xff0c;反而一个项目最根本的登录拦截请求接口都不会写&#xff0c;怎么拦截&#xff1f;为什么拦截&#xff1f;只知道用户登录时我后端会返回一个token&#xff0c;这个token是怎么生成的&#xff0c;我把它…

YOLOv10改进 | Conv篇 | 全新的SOATA轻量化下采样操作ADown(参数量下降百分之二十,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块&#xff0c;其中YOLOv9针对于这个模块并没有介绍&#xff0c;只是在其项目文件中用到了&#xff0c;我将其整理出来用于我们的YOLOv10的项目&#xff0c;经…

【大模型】微调实战—使用 ORPO 微调 Llama 3

ORPO 是一种新颖微调&#xff08;fine-tuning&#xff09;技术&#xff0c;它将传统的监督微调&#xff08;supervised fine-tuning&#xff09;和偏好对齐&#xff08;preference alignment&#xff09;阶段合并为一个过程。这减少了训练所需的计算资源和时间。此外&#xff0…

【计算机毕业设计】012基于微信小程序的科创微应用平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

华为ensp实现防火墙的区域管理与用户认证

实验环境 基于该总公司内网&#xff0c;实现图片所在要求 后文配置请以本图为准 接口配置与网卡配置 1、创建vlan 2、防火墙g0/0/0与云页面登录 登录admin,密码Admin123&#xff0c;自行更改新密码 更改g0/0/0口ip&#xff0c;敲下命令service-manage all permit 网卡配置…