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

目录

选择结构

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的余数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…

谷粒商城实战笔记-24-分布式组件-SpringCloud Alibaba-Nacos配置中心-命名空间与配置分组

文章目录 一&#xff0c;命名空间1&#xff0c;简介1.1&#xff0c;命名空间的主要功能和特点1.2&#xff0c;使用场景1.3&#xff0c;如何指定命名空间 2&#xff0c;命名空间实战2.1&#xff0c;环境隔离2.2&#xff0c;服务隔离 二&#xff0c;配置集三&#xff0c;配置集ID…

HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>3D effect&…

线下线上游戏电竞陪伴APP小程序H5同城线下约玩APP开发,语聊约玩平台搭建游戏陪玩APP源码

开发一款线下陪玩约玩APP的实际意义和在生活中的应用场景 1、满足社交需求:现代社会人们的社交圈往往受到时间、地点和其他限制的影响。线下陪玩约玩APP可以提供一个平台&#xff0c;让用户通过约玩的方式结识新朋友、扩大社交圈 2、解决孤独感:有些人由于工作忙碌、居住环境单…

MySQL体系架构解析

1.MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle …

YOLOv10改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块)&#xff0c;我们将其用于C2f中组合出一种新的结构&#xff0c;来替换我们网络中的模块可以达到一种轻量化的作用&#xff0c;我将其…

ENSP软件中DHCP的相关配置以及终端通过域名访问服务器

新建拓扑 配置路由器网关IP 设备配置命令&#xff1a;<Huawei> Huawei部分为设备名 <>代表当下所在的模式&#xff0c;不同模式下具有不同的配置权限<Huawei> 第一级模式&#xff0c;最低级模式 查看所有参数<Huawei>system-view 键入系统视图…

通过 tomcat 让手机访问到电脑写的 html 网页

之前实现的 html 小项目只能在自己的电脑上展示&#xff0c;如果要在其他电脑或者在手机上就看不到网页了 想要在手机上访问自己写的网页&#xff0c;我们可以借助 tomcat 首先我们可以从官网下载 tomcat 官网链接&#xff1a;apache官网 我们拉到最底部&#xff0c;找到 a…

C. Earning on Bets

题目 个人补充&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long longconst int maxn 1e6 5, in…

Apache Hadoop之历史服务器日志聚集配置

上篇介绍了Apache Hadoop的分布式集群环境搭建&#xff0c;并测试了MapReduce分布式计算案例。但集群历史做了哪些任务&#xff0c;任务执行日志等信息还需要配置历史服务器和日志聚集才能更好的查看。 配置历史服务器 在Yarn中运行的任务产生的日志数据不能查看&#xff0c;…

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介绍&#xff1a; 1.2 属性介绍&#xff1a; 1.3细节理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-网格布局&#xff1a; 3.1QGridLayout介绍&#xff1a; 3.2常用方法&#xff1a…

YOLOv10改进 | Conv篇 | 利用CVPR2024-DynamicConv提出的GhostModule改进C2f(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

MAVAE

1 自动下载项目所需要的jar包&#xff0c;统一管理jar包之间的依赖关系 2完成项目构建 maven的安装与配置 ​ 安装jdk环境&#xff1a;maven的运行需要依赖jdk。 下载maven。官网下载&#xff1a;Maven – Download Apache Maven 将下载的maven压缩包直接解压到本地磁盘即可。…

【网络安全】SSRF 之 Azure Digital Twins Explorer

未经许可&#xff0c;不得转载。 文章目录 正文 正文 Azure Digital Twins 是一个微软下的平台服务&#xff0c;允许开发者创建和运行数字孪生模型&#xff0c;这些模型能够反映物理世界中的实体及其关系&#xff0c;通过这些模型可以进行监控、分析和预测等操作。 1、进入主…

MACOS查看硬盘读写量

一、安装Homebrew 按照提示进行安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"二、安装smartmontools brew install smartmontools三、查看硬盘读写量等信息 sudo smartctl -a /dev/disk0

手机容器化 安装docker

旧手机-基于Termux容器化 1、安装app 在手机上安装Termux或ZeroTermux&#xff08;Termux扩展&#xff09; 1.1 切换源 注&#xff1a;可以将termux进行换源&#xff0c;最好采用国内源&#xff0c;例如&#xff1a;清华源等 更新包列表和升级包&#xff08;可选&#xff0…

VUE超详细入门

目录 1.什么是 Vue.js 2.Vue.js 优点 Vue中的第一个hello world Vue指令 v-model v-bind v-on v-if v-show v-for Vue 实例生命周期 从传统架构转向单文件架构(通过组件拼接) 安装element-ui使用 1.什么是 Vue.js Vue (读音 /vju ː /&#xff0c;类似于 view) 是…

【AI前沿】深度学习:神经网络基础

文章目录 &#x1f4d1;引言一、神经元和感知器1.1 神经元的基本概念1.2 感知器模型 二、多层感知器&#xff08;MLP&#xff09;2.1 MLP的基本结构2.2 激活函数的重要性2.3 激活函数2.4 激活函数的选择 三、小结 &#x1f4d1;引言 深度学习是现代人工智能的核心技术之一&…

【unity笔记】九、Unity添加串口通信

unity仿真使用虚拟串口调试。下面为简单流程。 常用串口调试软件在这里下载。 1.虚拟串口 添加虚拟串口&#xff0c;这里使用com1 com2 2. 串口调试 在这里为虚拟串口发送消息。 3. unity配置 3.1 设置 在文件->生成设置->玩家设置->玩家->其他设置 中找到…

【JavaSE】程序逻辑控制

目录 1. 顺序结构 2. 分支结构 2.1 if语句 2.1.1 语法格式1 2.1.2 语法格式2 2.1.3 语法格式3 2.1.4 练习 2.1.5 注意事项 2.2 switch 语句 3. 循环结构 3.1 while循环 3.1.1 语法格式 3.1.2 代码示例 3.1.3 注意事项 3.2 break 3.3 continue 3.4 for循环 …