结构控制语句

语句
顺序结构:

从上到下顺序执行

判断语句:

又是分支结构

分支结构是最基本的程序结构,分支结构由if语句实现。

  • 使用if语句,根据条件改变程序的逻辑流程。if语句如下形式

if  条件1 then
语句序列1;
[elsif 条件2 then
语句序列2;
.......
else 语句序列 n;  
]
end if;
--eg1

declare
enames varchar2(20) default '某三儿';
begin
if enames='某三儿' then
dbms_output.put_line('三儿,你好');
elsif enames='某四儿' then
dbms_output.put_line('四儿,你好');
else
dbms_output.put_line('二比你好');
end if;
end;
  • 选择语句 CASE语句适用于分情况的多分支情况,可以有以下三种用法

    1. 基本CASE结构,相等选择

      case 选择变量名
      when 表达式1 then
      语句序列1;
      when 表达式2 then
      语句序列2;
      when 表达式n then
      语句序列n;
      ......
      else
      语句序列n+1;
      end case;

    整个结构,选择变量的值同表达式进行顺序匹配,如果相等,则执行相关语句序列,不等则执行else语句序列。

    1. 表达式的case结构,oracle中case结构还能以赋值的形式出现等同于decode()函数,他根据选择变量的值求得不同的结果。语法如下

    变量:=case 选择变量名
    when 表达式1   then 值1
    when 表达式2   then 值2
    when 表达式n   then 值n
    else               值n+1
    end;
    ----与decode函数 相同
  
~~~sql
 --eg1  
declare
v_rwdid varchar2(20);
 
 begin
select n.rwids into v_rwdid  from d_rwd_type n where n.rwdtype_id='707183';
case v_rwdid
when '707183' then
dbms_output.put_line('当前课程为同步课堂');
when '707185' then
dbms_output.put_line('当前课程为颠覆课堂');
when '707186' then
dbms_output.put_line('当前课程为快乐100');
else
dbms_output.put_line('当前课程不存在');
end case;
end;
 
 ---eg2用法2
 
declare
v_rwdid varchar2(20);
v_name varchar2(50);
 begin
select n.rwids into v_rwdid  from d_rwd_type n where n.rwdtype_id='707183';
v_name:=case v_rwdid
      when '707183'   then '同步课堂'
      when '707184'   then '颠覆课堂'
      when '707185'   then '快乐100'
      else '课程不存在'
      end;
      dbms_output.put_line('当前课程为'||v_name) ;      
end;
  1. 搜索CASE结构 Oracle 还提供了一种搜索case结构,它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。case的任意判断,选择变量和表达式不再局限于相等,可以大于,小于,等于,等

  case
when 条件表达式1 then
语句序列1;
when 条件表达式2 then
    语句序列2;
    ...
    else
    语句序列n;
    end case;
  --eg
declare
sal emp.sail%type;
 begin
  select n.sail into sal  from emp n where n.empno='001';
  case
  when sal>10000 then dbms_output.put_line('工资等级为A');
  when sal>5000 then dbms_output.put_line('工资等级为B');
  when sal>3000 then dbms_output.put_line('工资等级为C');
  else
  dbms_output.put_line('工资等级为d');
  end case
end;
循环结构

循环结构也是最重要的程序控制语句,用来控制反复执行一段程序。比如我们要进行累加,则可以通过适当的循环程序实现。pl/sql循环可划分为3种:

  1. 基本LOOP循环

    LOOP   ---循环其实标识
    语句1;
    语句2;
    exit [when 条件;]
    END LOOP;   ---循环结束标识
    --eg1 1+2...+100
    declare
    v_sum number default 0;
    v_i   number default 0;

    begin
    loop
    v_sum:=v_sum+v_i;
    v_i:=v_i+1;
    when v_i>100 exit;
    end loop;
    end;

     

  2. FOR LOOP 循环 for 循环是固定次数的循环,格式如下

    FOR 循环控制变量 in [reverse] 上限..下限
    loop
    语句1;
    语句2;
    end loop;
    --循环控制变量 是隐含定义的,不需要声明。
    --下限和上限用于指明循环次数。正常情况下循环控制变量取值由下限到上限递增,reserver关键字表示循环控制变量的取值由上限到下限递减。
    --eg1:输出99乘法表
    declare
    for i in 1..9 loop
    for j in 1..i loop
    dbms_output.put(i||'*'||j||'='||i*j);
    dbms_output.put(' ');
    end loop;
    dems_output.putline('');
    end loop;
    begin
    end;

     

  3. WHILE LOOP 循环

    while循环是有条件循环,格式如下:

    while 条件表达式
    Loop
    语句1;
    语句2;
    end loop;

    当条件满足时,执行循环,当条件不满足时,则循环结束。如果第一次判断条件为假,则不执行循环体。

    ----eg1 内层while循环输出9*9乘法表
    declare
      v_var number default 0;
    begin

    for i in 1..9 loop
      v_var:=0; ---每行开始都是从1开始,必须赋值0
    while v_var<i loop
    v_var:=v_var+1;
    dbms_output.put(v_var||'*'||i||'='||v_var * i||'');
    end loop;
    dbms_output.put_line(' ');
    end loop;

    end;
    --嵌套循环输出一个三角形
    declare
    v_var number default 0;
    begin
    for i in 1..6 loop
    v_var:=6;
    while v_var>i loop
    v_var:=v_var-1;
    dbms_output.put('');--第一层子循环输出倒三角的空格
    end loop;
    for j in 1..i loop
    dbms_output.put('*');--第二层输出三角的一半
    end loop;
    for j in 1..i loop
    dbms_output.put('*');--第三层输出三角的另一半。
    end loop;
    dbms_output.putline('')
    end loop;
    end;/*
         **
        ****
       ******
      ********
     **********
    ************                 */

     

  4.  
posted @   翻滚的小井蛙  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示