Oracle--pl/sql编程-分支语句(判断、循环)
if语句
oracle: elsif java: else if
if (条件) then pl/sql或sql语句 [elsif (条件) then ] ...可以有多个elsif [else] end if; ---必须写 结束大括号
例:
--完成根据员工的编号查看员工需要交的税的情况 大于等于3000交1% 大于等于1500交 0.5%,低于1500的不要交税 declare v_empno emp.empno%type; v_sal emp.sal%type; v_name emp.ename%type; v_rate emp.sal%type; --需要交的税 begin v_empno :='&请输入员工编号'; select ename,sal into v_name,v_sal from emp where empno = v_empno; if v_sal >= 3000 then v_rate := v_sal*0.01; elsif v_sal >= 1500 then v_rate := v_sal*0.005; else v_rate := 0; end if; dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name ||',薪水:'||v_sal||',需要交的税:'||v_rate); end;
swicth结构:oracle 的case -decode 是对case的简写
case 等值判断
类似于java的switch
case 表达式 when 值1 then ... when 值2 then ... ... else ... end case ;
例:
--查询员工的岗位, 显示的中文的 declare v_empno emp.empno%type := '&请输入员工的编号'; v_job emp.job%type; v_cJob emp.job%type; begin select job into v_job from emp where empno = v_empno; case v_job when 'CLERK' then v_cJob :='文员'; when 'SALESMAN' then v_cJob :='销售'; when 'MANAGER' then v_cJob :='主管'; when 'ANALYST' then v_cJob :='研发'; when 'PRESIDENT' then v_cJob :='董事长'; else v_cJob := '未知'; end case; dbms_output.put_line(v_cJob); end;
case 范围判断,等值(类似if)
case when 条件 then ... when 条件 then ... ... else ... end case;
例:
declare v_empno emp.empno%type; v_sal emp.sal%type; v_name emp.ename%type; v_rate emp.sal%type; --需要交的税 begin v_empno :='&请输入员工编号'; select ename,sal into v_name,v_sal from emp where empno = v_empno; /* if v_sal >= 3000 then v_rate := v_sal*0.01; elsif v_sal >= 1500 then v_rate := v_sal*0.005; else v_rate := 0; end if; */ case when v_sal >= 3000 then v_rate := v_sal*0.01; when v_sal >= 1500 then v_rate := v_sal*0.005; else v_rate := 0; end case; dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name ||',薪水:'||v_sal||',需要交的税:'||v_rate); end;
if ,case if不能再sql语句中使用, case 可以在sql语句中使用
--查询员工的信息,以及 >=3000 高新, >=1500 中等收入, <1500 底薪 收入情况 -- 注意: *** sql语句中使用case, 不能使用end case, 使用end; -- 而pl/sql块, case 的结束是一定使用 end case; --decode() 函数, 在sql使用, 简化 case等值判断, -- 在sql中使用范围判断, 使用case select e.*, case when e.sal >=3000 then '高新' when e.sal >=1500 then '中等收入' else '底薪' end 收入情况 from emp e;
版权声明:本文为64Byte原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。