oracle数据库的随堂笔记(六)-pl/sql进阶-控制结构

控制结构
     介绍
          pl/sql中的控制结构:条件语句、循环结构、顺序控制结构……
     1)条件分支语句
          pl/sql中提供了是三种条件分支语句if--then,if--then--else,if--then--elsif--then--else
 
          a.简单的条件判断if--then
               ?编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加
          10%
               create or replace procedure xf_pro1(xfName varchar2) is
               --定义
               v_sal emp.sal%type;
               begin
               --执行
               select sal into v_sal from emp where ename=xfName;
     --判断
     if v_sal<2000 then
     update emp set sal=sal+sal*10% where ename=xfName;
     end if;
               end;
 
               --调用
               exec xf_pro1('SCOTT');
 
          b.二重条件分支if--then-else
               ?编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加
          100;如果补助为0就把补助设为200;
               create or replace procedure xf_pro2(xfName varchar2) is
               v_comm emp.comm%type;
               begin
               select comm into v_comm from emp where ename=xfName;
               if v_comm<>0 then--<>表示不等于
               update emp set comm=comm+100 where ename=xfName;
               else
               update emp set comm=200 where ename=spName;
               end if;
               end;
 
          c.多重条件分支if--then--elsif--then--else
               ?编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增
          加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其他职位的雇员工资增加
          200。
               create or replace procedure xf_pro3(xfNo number) is
               v_job emp.job%type;
               begin
               select job into v_job from emp where empno=xfNo;
               if v_job='PRESIDENT' then
               update emp set sal=sal+1000 where empno=xfNo;
               elsif v_job='MANAGER' then
               update emp set sal=sal+500 where empno=xfNo;
               else
               update emp set sal=sal+200 where empno=xfNo;
               end if;
               end;
               
     2)循环语句
          a.loop循环
               loop是pl/sql中最简单的循环语句,这种语句以loop开头,以end loop结尾,循环体内容至少
          被执行一次。
               现在有一张表,结构如下:
用户id 用户名
   
               请编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加
     create table users(userNo number,userName varchar2(40));
 
     create or replace procedure xf_pro4(xfName varchar2) is
     v_num number:=1;
     begin
     loop
          insert into users values(v_num,xfName);
          exit when v_num=10;
          v_num:=v_num+1;
     end loop;
     end;
 
     exec xf_pro4('xiaofei');
 
b.while循环
     对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while...loop开始,以end loop结束。
     案例同上
     create or replace procedure xf_pro5(xfName varchar2) is
     v_num number:=11;
     begin
     while v_num<=20 loop
          insert into users values(v_num,xfName);
          v_num:=v_num+1;
     end loop;
     end;
c.for循环(不推荐使用)
     for循环的基本结构如下:
     begin
          for i in reverse 21..30 loop
          insert into users values(i,'xiaofei');
          end loop;
     end;
     可以看出,控制变量i在隐含中不停增加
     
     3)顺序控制语句goto,null
          a.goto语句
               goto语句用于跳转到特定符号去执行语句。注意由于使用goto语句会增加程序的复杂性,并          
          使得应用程序可读性变差,所以在做一般应用程序开发时,不建议使用goto语句。(多重循环可 
          以适当使用)    
               基本语法如下:goto lable,期中lable是已经定义好的标号名。
               declare
     i int:=1;
     begin
          loop
          dbms_output.put_line('输出i='||i);
          if i=10 then
          goto end_loop;
          end if;
          i:=i+1;
          end loop;
     <<end_loop>>
     dbms_output.put_line('循环结束');
     end;
 
b.null
     null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性。
     例:
          declare
v_sal emp.sal%type;
v_ename emp.ename%type;
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
if v_sal<3000 then
update emp set comm=sal*0.1 where ename=v_ename;
else
null;
end if;
end;
               
               
宁可孤独,也不违心。宁可抱憾,也不将就。
原文地址:https://www.cnblogs.com/fei-er-blog/p/4165475.html