当前位置:首页 > 数据库 > plsql判断和循环

plsql判断和循环

2022年09月16日 14:42:25数据库6

if语句

语法1

如果条件成立,执行if和end if 之间的语句。

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

语法2

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

语法3

if 条件表达式1 then
    条件1成立时执行的语句;  
elsif 条件表达式2 then
    条件2成立时执行的语句;
 ...
elsif 条件表达式n then
    条件n成立时执行的语句;
else
    所有条件都不成立时执行的语句;
end if;
例1
  
```
declare
  test_scores number(4,1):=&请输入您的成绩;
begin
  if test_scores>=90 and test_scores<=100 then
    dbms_output.put_line('您的成绩是:'||test_scores||'   评测等级为:'||'A');
    elsif test_scores>=80 and test_scores<90 then
      dbms_output.put_line('您的成绩是:'||test_scores||'   评测等级为:'||'B');
      elsif test_scores>=70 and test_scores<80 then
        dbms_output.put_line('您的成绩是:'||test_scores||'   评测等级为:'||'C');
        elsif test_scores>=60 and test_scores<70 then
          dbms_output.put_line('您的成绩是:'||test_scores||'   评测等级为:'||'D');
          elsif test_scores<60 then
            dbms_output.put_line('您的成绩是:'||test_scores||'   评测等级为:'||'不合格');
            else 
              dbms_output.put_line('请您确认成绩后再试');
            end if;
end;
```
  
例2
  
declare
test_scores1 number(4,1):=&请输入您的成绩;

begin
  if test_scores1<60 then
    dbms_output.put_line('您输入的成绩为'||test_scores1||'    经评测等级为'||'不及格');
    elsif test_scores1<70 and test_scores1>=60 then
      dbms_output.put_line('您输入的成绩为'||test_scores1||'    经评测等级为'||'D');
      elsif test_scores1<80 and test_scores1>=70 then
        dbms_output.put_line('您输入的成绩为'||test_scores1||'    经评测等级为'||'C');
        elsif test_scores1<90 and test_scores1>=80 then
          dbms_output.put_line('您输入的成绩为'||test_scores1||'    经评测等级为'||'B');
          elsif test_scores1<=100 and test_scores1>=90 then
            dbms_output.put_line('您输入的成绩为'||test_scores1||'    经评测等级为'||'A');
            else 
              dbms_output.put_line('请您确认成绩后再试');
              end if;           
end;
  

case when语句

语法1(这种语法一般只用在sql语句中,它功能和decode函数一样)

case 
   when 条件表达式1 then
      值1;
   when 条件表达式2 then
      值2;
   ...
   when 条件表达式3 then
      值2;
   else
      默认值
end case; 

语法2

case 表达式
  when 值1 then
    plsql语句;
  when 值2 then
    plsql语句;
  ..
  when 值3 then
    plsql语句;
  else
    默认执行的语句;
end case;
例1
  
```
declare
v_scores number(4,1):=&请输入您的成绩;
v_output varchar2(50);
begin
  v_output:=case 
  when v_scores<60 then '不及格'
    when v_scores<70 and v_scores>=60 then 'D'
      when v_scores<80 and v_scores>=70 then 'C'
        when v_scores<90 and v_scores>=80 then 'B'
          when v_scores<=100 and v_scores>=90 then 'A'
            else '请您确认成绩后再试' end;
  dbms_output.put_line('您输入的成绩为'||v_scores||'评测等级为'||v_output);
end;
```
  
例2
  
```
declare
v_grade varchar2(20):='A';
v_score varchar2(50);
begin
  v_score:=case v_grade
  when '不及格' then '成绩<60'
    when 'D' then '60<=成绩<70'
      when 'C' then '70<=成绩<80'
        when 'B' then '80<=成绩<90'
          when 'A' then '90<=成绩<=100'
            else '请确认后再试' end;
   dbms_output.put_line(v_score);
end;
```
  

loop

语法

loop
    循环体(plsql语句);
    退出循环条件;
    循环变量控制语句;
end loop
循环打印1-10
  
```
declare
  --声明一个变量作为循环变量
  n number(6):=1;

begin
  --循环打印
  loop
    --循环体语句,打印n的值
    dbms_output.put_line(n);
    --退出循环条件
    exit when n=10;
    --循环控制语句,修改循环变量n的值
    n:=n+1;
  end loop;

end;
```
  
循环打印1-10
  
declare
  control_var number(2):=0;
begin
  loop
    if control_var>9 then
      exit;
    end if;
    control_var:=control_var+1;
    dbms_output.put_line(control_var);
  end loop;
end;
  

while

如果循环条件成立,执行循环体和循环控制语句
直到循环条件不成立退出循环

while 循环条件 loop
  循环体语句;
  循环控制语句;
end loop;
循环打印1-10
  
```
declare
  --声明一个变量作为循环变量
  n number(10):=1;
begin
  --while循环打印条件
  while n<=10 loop
    --循环体语句,打印n的值
    dbms_output.put_line(n);
    --循环控制语句,修改循环变量n的值
    n:=n+1;
  end loop;
end;
```
  
循环打印1-10
  
```
declare
  n number(10):=0;
begin
  while n<10 loop
    n:=n+1;
    dbms_output.put_line(n);
  end loop;
end; 
```
  

for循环

语法1

for 循环变量 in 数字集合 loop
  循环体语句;
end loop;

数字集合的表示
1..10 表示1到10的自然数集合

循环打印1-10
  
```
begin 
  for i in 1..10 loop
    dbms_output.put_line(i);
  end loop;
end;
```
  
循环打印10-1
  
```
begin
  for i in reverse 1..10 loop
    dbms_output.put_line(i);
  end loop;
end;
```

reverse表示集合顺序反转

语法2

for 循环变量 in select语句或者游标变量 loop
  循环体语句;
end loop;
获取emp表中员工编号
  
```
begin
  for v_empno in(select empno from emp) loop
    dbms_output.put_line(v_empno.empno);
  end loop;
end;

```
  
获取emp表中员工编号和工作
  
```
begin
  for v_emp in(select * from emp) loop
    dbms_output.put_line(v_emp.empno||','||v_emp.job);
  end loop;
end;
```
  
获取emp表中全部数据
  
```
begin 
  for v_emp in(select * from emp) loop
    dbms_output.put_line(rpad(v_emp.empno, 4,' ')||' , '||
                         nvl(rpad(v_emp.ename,10,' '),'          ')||' , '||
                         nvl(rpad(v_emp.job,9,' '),'         ')||' , '||
                         nvl(rpad(v_emp.mgr,4,' '),'    ')||' , '||
                         nvl(to_char(v_emp.hiredate,'YYYYMMDD'),'        ')||' , '||
                         nvl(rpad(v_emp.sal,4,' '),'    ')||' , '||
                         nvl(rpad(v_emp.comm,7,' '),'       ')||' , '||
                         nvl(rpad(v_emp.deptno,2,' '),'  ')
    );
  end loop;
end;
```
  

退出循环

  • exit退出整个循环
  • continue退出本次循环
  • return直接退出程序
for
for1
  
```
begin
  for i in 1..9 loop
    
    if i=5 then
      dbms_output.put_line('我要退出了');
      exit;
      end if;
      
      dbms_output.put_line(i);
      end loop;
      dbms_output.put_line('小**,我在循环体外');
end;
```
  
执行结果
  
```
1
2
3
4
我要退出了
小**,我在循环体外
```
  
for2
  
```
begin
  for i in 1..9 loop
    
    if i=5 then
      dbms_output.put_line('我要退出了');
      continue;
      end if;
    dbms_output.put_line(i);
    end loop;
    dbms_output.put_line('小**,我在循环体外');
end;
```
  
执行结果
  
1
2
3
4
我要退出了
6
7
8
9
小**,我在循环体外

  
for3
  
```
begin
  for i in 1..9 loop
    
    if i=5 then
      dbms_output.put_line('我要退出了');
      return;
      end if;
    dbms_output.put_line(i);
    end loop;
    dbms_output.put_line('小**,我在循环体外');
end;
```
  
执行结果
  
1
2
3
4
我要退出了
  
loop
loop
  
```
declare
  v_control number(2) := 0;
begin
  loop
    v_control := v_control + 1;
    if v_control = 5 then
      continue;
    end if;
    if v_control = 10 then
      exit;
    end if;
    dbms_output.put_line(v_control);  
  end loop;
  dbms_output.put_line('小**,我在循环体外');
end;
```
  
执行结果
  
1
2
3
4
6
7
8
9
小**,我在循环体外
  
while
while
  
```
declare
  v_control number(2):=0;
begin
  while v_control<99 loop
    if v_control is not null then
      v_control:=v_control+1;
    end if;
    if v_control=5 then
      continue;
    end if;
    if v_control=10 then 
      return;
    end if; 
  dbms_output.put_line(v_control);
  end loop;
  dbms_output.put_line('小**,我在循环体外');
end;
```
  
执行结果
  
1
2
3
4
6
7
8
9

  

goto(不常用)

执行到goto语句时,代码会回到标签所在位置,重新往下执行

标签
  
```
declare
  --声明一个变量作为循环变量
  n number:=1;
begin
  <
     
      >
  dbms_output.put_line(n);
  n:=n+1;
  if n<11 then
    goto lebal;
  end if;
end;
```
  
     

作者:_冥想
来源链接:https://www.cnblogs.com/inmeditation/p/12018958.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42019.html

标签: PLSQL
分享给朋友:

“plsql判断和循环” 的相关文章

使用PLSQL Developer连接远程数据库的两种方法

使用PLSQL Developer连接远程数据库的两种方法

使用plsql连接远程数据库,不仅要安装PLSQL Developer,还需要安装oracle instantclient客户端,并将PLSQL Developer的tools->preferences connection的oracle home...

plsql Developer 登录卡死

查看 listener.log 大小 listener.log 目录位置 listener.log 目录位置链接:https://blog.csdn.net/a61595579/article/details/52446916...

plsql的database下拉为空,如何解决?

plsql的database下拉为空,如何解决?

为什么plsql的database下拉为空?我在tnsnames.ora中设置了字符串ORCL,疑惑了我好久,在网上找了许久解决方案,终于是解决了!如下对我的解决过程做一个记录。 如何解决plsql的database下拉为空?   为什么plsql的databa...

plsql注册

对于plsql客户端,用户注册,这里有通用的用户注册系列号、产品编号、密码 1、Serial Number:115139568 2、Product Number:keqtkf6mb5z5kww7wkl4u3m84emzk6644mgj4gt2 3、Pas...

使用plsql Developer 连接远程服务器

使用plsql Developer 连接远程服务器

大致说一下我的环境1本地已经安装好了Oracle 并且安装了plsql Developer 但是因为要连接另外一台oracle 数据库服务器  所以需要配一下远程连接 2首先声明我这里是本地先安装好Oracle数据据库以后(说明系统的一些变量都已经配置...

【PLSQL】变量声明,结构语句,cursor游标

************************************************************************   ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ********...

PLSQL 11 注册码

注册码: Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number:601769 password:xs374ca...

PLSQL Developer破解注册码

product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le  serial Number:226959  password: xs374ca 作者:阿趟哥 来源链接:https://blog.csdn.net/...

Oracle数据库安装+PLSQL安装配置整理

Oracle数据库安装+PLSQL安装配置整理

1、Oracle安装过程   1.1 下载11g安装包 oracle Database 11g 第 2 版 (11.2.0.1.0) 标准版、标准版 1 以及企业版,适用于 Microsoft Windows (x64) 的 Oracle Databa...

PLSQL Developer安装所遇问题

PLSQL Developer安装所遇问题

˃˃ _ JavaClub全栈架构师技术笔记"˃2019独角兽企业重金招聘Python工程师标准>>>     在安装PLSQL Developer时,肯定很多同学遇到过各种问题...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。