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 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/64Byte/p/12709334.html