3.分支控制语句

        分支控制语句我理解的是根据不同的条件做出不同的执行。

分支控制语句主要分为2类:

if 语句块:使用if_else 等语句块处理分支控制。

case 语句块:使用case 语句块处理分支控制。

1. if 语句块进行处理
declare
   v_count number(10):=0; --定义计时器变量
   v_emp number(4):=7888; --定义员工编号
begin
   select count(1)
     into v-count
     from emp
    where empno=&v_empno;
    --使用if 语句判断,如果员工编号不存在,结果为0
    if v_count =0
    then
    -- 则执行insert语句,插入新的员工记录
       insert into emp
                 (empno,ename,job,hiredate,sal,daptno
                 )
            values(v_empno,'张三','经理',trunc(sysdate),1000,20);
    end if;
    -- 向数据库提交更改
    commit;
exception 
   when others
   then
      dbms_output.put_line(sqlerrm); -- 输出异常信息
end;
     
2.if_then_if 示例
declare
   v_count number(10):=0; -- 定义计数器变量
   v_empno number(4):=7888; --定义员工编号
begin
   select count(1)    --首先查询指定的员工编号是否存在
     into v_count
     from emp
    where empno =v_empno;
 -- 使用if 语句判断,如果员工编号不存在,结果为0
   if v_count=0
   then
   insert into emp
             (empno,ename,job,hiredate,sal,deptno
             )
       values(v_empno,'张三','经理',trunc(syadate),1000,20
          );
   else -- 否则执行update 语句更新员工信息
      update emp
         set ename='张三',
               job='经理',
          hiredate= trunc(sysdate);
               sal= 1000,
            daptno=20,
      where empno =v_empno;
    end if;
    -- 向数据库提交更改
    commit;
exception
   when others
   then
      dbms_output.put_line(sqlerrm);-- 输出异常信息
end;
3.嵌套 if语句
declare
   v_sal    number(7,2);   -- 薪资变量
   v_deptno number(2);     -- 部门变量
   v_job   varchar2(9);    -- 职位变量
begin
-- 从数据库中查询指定员工编号的信息、
   select deptno,v_job,sal
     into v_deptno,v_job,v_sal
     from emp 
    where empno =:empno;
    -- 如果部门编号为20的员工
    if v_job ='clerk'
    then
    -- 如果职别为clerk
      if v_job ='clerk'
      then
        -- 加薪0.12
       v_sal :=v_sal *(1+0.12);
      -- 如果职别为 analyst
      elsif v_job ='analyst'
      then
         -- 加薪0.19
        v_sal :=v_sal*(0.19);
      end if;
    -- 否则,不为20的员工将不允许加薪
    else
       dbms_output.put_line('进部门编号为 20的员工才能加薪');
    end if; 
end;
4.if-then-else 分支
declare
   v_character char(1) :=&tmpvar;  --定义替换变量
begin
   if v_character='A' -- 判断字符是否为‘A’,如果不是,则跳到下一个elsif
   then
      dbms_output.put_line('当前输出字符串:'||v_character);
   elsif v_v_character='B'  --判断字符是否为‘B’,如果不是,则跳到下一个elsif
   then
      dbms_output.put_line('当前输出字符串:'||v_character);
   elsif v_v_character='C'  --判断字符是否为‘c’,如果不是,则跳到下一个elsif 
    then
      dbms_output.put_line('当前输出字符串:'||v_character);
   elsif v_v_character='D'  --判断字符是否为‘D’,如果不是,则跳到下一个elsif  
    then
      dbms_output.put_line('当前输出字符串:'||v_character); 
   else
      dbms_output_put_line('不是A-D之间的字符')‘
   end if;
end;
5.简单的case 分支
declare
   v_job varchar2(30);  --定义保存case 选择器的字符型变量
   v_empno number(4) :=&empno; --定义用来查询员工的员工编号
begin
   select job                  --获取选择器v_job的值
     into v_job
     from emp
    where empno=v_empno;
  --当指定了case的选择器为v_job后,所有的when 子句的类型必须匹配varchar2类型
  case v_job
     when 'clerk'
     then
        update emp 
           set sal =sal *(1+0.15)
         where empno =v_empno;
       dbms_output.put_line('为不同职员加薪15%');
     when 'analyst'
     then
        update emp 
           set sal= sal*(1+0.18)
         where empno =v_empno;
        dbms_output.put_line('为分析人员加薪18%');
      when 'manager'
      then
         update emp
            set sal =*(1+0.20)
          where empno =v_empno;
        dbms_output.put_line('为管理人员加薪20%');
      when 'salesman'
      then
         update emp 
            set sal =sal *(1+0.22)
          where empno=v_empno;
        dbms_output.put_line('为销售人员加薪22%');
     else                    -- 使用else 语句显示信息
        dbms_output.put_line('员工职级不在加薪的行列');
   end case;
 end;
            
     
    
6.搜索case 语句
eclare
   v_sal number(10,2); -- 定义保存薪水的变量
   v_empno number(10) :=&empno; -- 用来查询的员工编号
begin
   select sal
     into v_sal
     from emp
    where empno =v_empno;
  -- 使用搜索case 语句,判断员工薪资级别
    case
       when v_sal between 1000 and 1500
       then
          dbms_output.put_line('员工级别:初级职员');
       when v_sal between 1500 and 3000
       then
          dbms_output.put_line('员工级别:中级管理');
       when v_sal between 3000 and 5000
       then
          dbms_output.put_line('员工级别:高级经理');
       else
          dbms_output.put_line('不在级别范围之内');
     end case;
end;
       

 

posted @ 2021-07-22 11:03  马蹄烧饼  阅读(212)  评论(0编辑  收藏  举报