Oracle学习笔记(二十八)——pl/sql的进阶之控制结构

控制结构
1、条件分支语句
     1)分为
  • if--then
  • if--then--else
  • if--then--elsif--else
    
     2)简单条件判断if--then
  • 编写一个过程,可以输入一个雇员名,如果该雇员名的工资低于2000,就给该雇员工资增加10%
  • SQL> --编写一个过程,可以输入一个雇员名,如果该雇员名的工资低于2000,就给该雇员工资增加10%
    
    SQL> create or replace procedure sp_proc3(spName varchar2) is
      2  --定义
      3  v_sal emp.sal%type;
      4  begin
      5    select sal into v_sal from emp where ename=spName;
      6    --判断
      7    if v_sal<2000 then
      8      update emp set sal=sal+sal*0.1 where ename=spName;
      9    end if;
     10  end;
     11  /
    Procedure created

  • SQL> exec sp_proc3('SCOTT');
    PL/SQL procedure successfully completed

     3)二重条件分支if--then--else
  • 编写一个过程,可以输入一个雇员名,如果该雇员名的补助不是0,就在原来的基础上增加100;如果补助为0,就把补助设为200。
  • SQL> --编写一个过程,可以输入一个雇员名,如果该雇员名的补助不是0,就在原来的基础上增加100;
    
    SQL> --如果补助为0,就把补助设为200。
    
    SQL> create or replace procedure sp_proc4(spName varchar2) is
      2  --定义
      3  v_comm emp.comm%type;
      4  begin
      5    select comm into v_comm from emp where ename=spName;
      6    --判断
      7    if v_comm<>0 then
      8      update emp set comm=comm+100 where ename=spName;
      9      else
     10        update emp set comm=comm+200 where ename=spName;
     11      end if;
     12  end;
     13  /
    Procedure created

     4)多重条件分支if--then--elseif--else
  • 编写一个过程,可以输入一个雇员编号,如果该雇员名的职位是president,就给他的工资增加100;如果该雇员的职位是manager,就给他的工资增加500,其它职位的雇员工资增加200。
  • SQL> --编写一个过程,可以输入一个雇员编号,如果该雇员名的职位是president,就给他的工资增加100;
    
    SQL> create or replace procedure sp_proc5(spNo number) is
      2  v_job emp.job%type;
      3  begin
      4    select job into v_job from emp where empno=spNo;
      5    if v_job='PRESIDENT' then
      6      update emp set sal=sal+1000 where empno=spNo;
      7      elsif v_job='MANAGER' then
      8        update emp set sal=sal+500 where empno=spNo;
      9        else
     10          update emp set sal=sal+200 where empno=spNo;
     11     end if;
     12  end;
     13  /
    Procedure created

2、循环语句
     1)分为
  • loop
  • while
  • for

     2)循环语句loop
  • pl/sql中最简单的循环语句。
  • 以loop开头,以end loop结尾,至少被执行一次。
  • 案例:现有一张表users,表结构如下:
         
          编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加。
    • SQL> --编写一个过程,可输入用户名,并循环添加10个用户到users表中,
      SQL> --用户编号从1开始增加。
      SQL> create or replace procedure sp_proc6(spName varchar2) is
        2  --定义
        3  v_num number:=1;
        4  begin
        5    loop
        6      insert into users values(v_num,spName);
        7      --判断退出条件
        8      exit when v_num=10;
        9      --自增
       10      v_num:=v_num+1;
       11    end loop;
       12  end;
       13  /
      Procedure created
    • SQL> exec sp_proc6('你好');
      PL/SQL procedure successfully completed
    • SQL> select * from users;
          USERNO USERNAME
      ---------- ----------------------------------------
               1 你好
               2 你好
               3 你好
               4 你好
               5 你好
               6 你好
               7 你好
               8 你好
               9 你好
              10 你好
      10 rows selected

     3)循环语句while
  • 案例:现有一张表users,表结构如下:
             
              编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从11开始增加。
    •     SQL> --编写一个过程,可输入用户名,并循环添加10个用户到users表中,
          SQL> --用户编号从11开始增加。
          SQL> create or replace procedure sp_proc7(spName varchar2) is
            2  --定义
            3  v_num number:=11;
            4  begin
            5    while v_num<=20 loop
            6      insert into users values(v_num,spName);
            7      v_num:=v_num+1;
            8    end loop;
            9  end;
           10  /
          Procedure created



     4)循环语句--fo循环
  • 基本for循环的基本解耦股如下:
    •     begin
            for i in reverse 1..10 loop
              insert into users values(i,'小红' );
            end loop;
          end;

3、顺序控制语句
     1)分为:
  • goto语句
  • null语句

     2)goto语句
  • 用于跳转到特定标号去执行语句。
  • 注意:由于使用gogo语句会增加程序的复杂性,并使得应用程序可读性变差,因此建议不要使用goto语句。
  • 基本语法:goto lable,其中lable是已经定义好的标号名。
  • SQL> declare
      2  i int:=1;
      3  begin
      4    loop
      5      dbms_output.put_line('输出i='||i);
      6      if i=10 then
      7        goto end_loop;
      8      end if;
      9      i:=i+1;
     10    end loop;
     11    <<end_loop>>
     12        dbms_output.put_line('循环结束');
     13  end;
     14  /
    
    输出i=1
    输出i=2
    输出i=3
    输出i=4
    输出i=5
    输出i=6
    输出i=7
    输出i=8
    输出i=9
    输出i=10
    循环结束
    PL/SQL procedure successfully completed

     3)null
  • null语句不会执行任何操作,并且会直接将控制传递到下一条语句。
  • 好处:提高pl/sql的可读性。
  • SQL> declare
      2  v_sal emp.sal%type;
      3  v_ename emp.ename%type;
      4  begin
      5    select ename,sal into v_ename,v_sal from emp where empno=&no;
      6    if v_sal<3000 then
      7      update emp set comm=sal*0.1 where ename=v_ename;
      8      else
      9        null;
     10    end if;
     11  end;
     12  /
    PL/SQL procedure successfully completed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值