zoukankan      html  css  js  c++  java
  • 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;
           
  • 相关阅读:
    努力 加油
    大总结(全文手打)加深记忆 表单 注册页面的第一次制作 小白一只多多包含
    购物栏
    三级轮播
    图片轮播
    啊!!苦等,博客终于通过了!!
    SQL升级Oracle挖的Null坑,你懂的!
    关于master..xp_cmdshell’的几个错误_解决办法(转)
    班级博客
    图片系统架构思考之一:删除图片--不容忽视
  • 原文地址:https://www.cnblogs.com/etllearn/p/15042678.html
Copyright © 2011-2022 走看看