一、摘要
这是夜说的第三篇学习文章,学习plsql的if条件选择语句。
二、条件选择语句
if语句
利用if语句实现控制时,根据选择条件个数的不同,可以分为以下三种情况:
if then
if then else
if then elsif
注意:if语句必须以end if作为结束
1. if then语句的语法为:if condition thenstatementsend if;其中,condition为返回逻辑值的表达式、变量、常量等,如果返回值为真,则执行statements,否则不执行任何操作,结束该语句的执行。例1:查询50号部门的平均工资,如果平均工资低于5000元,则每个员工工资增加1000元。SQL> set serveroutput onSQL> declare2 v_avgsal employees.salary%type;3 begin4 select avg(salary) into v_avgsal from employees where department_id = 50;5 if v_avgsal < 5000 then6 update employees set salary = salary + 1000 where department_id = 50;7 end if;8 end;9 /PL/SQL procedure successfully completed.2.if then else语句的语法为:if condition thenstatementselseelse_statementsend if;如果condition条件为真,则执行then短语后面的statements语句。如果条件为假,则执行else短语后面的else_statements语句。例2:查询110号员工的工资,如果工资大于8000元,则工资增加500元。如果工资低于8000元,则工资增加1000元。SQL> set serveroutput onSQL> declare2 v_salary employees.salary%type;3 begin4 select salary into v_salary from employees where employee_id = 110;5 if v_salary > 8000 then6 update employees set salary = salary + 500 where employee_id = 110;7 else8 update employees set salary = salary + 1000 where employee_id = 110;9 end if;10 end;11 /PL/SQL procedure successfully completed.if语句可以相互嵌套。在if语句的执行语句statements和else_statements中都可以嵌套if语句。例3:if语句的嵌套示例SQL> set serveroutput onSQL> declare2 procedure p (sales number,quota number,emp_id number)3 is4 bonus number := 0;5 begin6 if sales > (quota + 200) then7 bonus := (sales - quota)/4;8 else9 if sales > quota then10 bonus := 50;11 else12 bonus := 0;13 end if;14 end if;15 dbms_output.put_line('bonus = '||bonus);16 update employees set salary = salary + bonus where employee_id = emp_id;17 end p;18 begin19 p(10100,10000,120);20 p(10500,10000,121);21 p(9500,10000,122);22 end;23bonus = 50bonus = 125bonus = 0PL/SQL procedure successfully completed.if then elsif语句的语法为:if condition1 thenstatements1elsif condition2 thenstatements2[elsif condition3 thenstatements3] ...[elseelse_statements]
end if;如果程序有多个条件选择,不同选择有不同的逻辑处理,可以使用if then elsif语句。执行第一个condition为真,其后的语句不再执行。如果所有的condition都不为真,执行else短语的else_statements语句。如果没有else短语,则结束if语句的执行。例4:输入一个员工号,如果该员工在50号部门,则工资增加1000元。在60号部门,则工资增加1500元。在90号部门,则工资增加2000元。在其他部门,则工资增加2500元。SQL> declare2 v_deptno employees.department_id%type;3 v_increment number(4);4 v_empno employees.employee_id%type;5 begin6 v_empno := &x;7 select department_id into v_deptno from employees where employee_id = v_empno;8 if v_deptno = 50 then9 v_increment := 1000;10 elsif v_deptno = 60 then11 v_increment := 1500;12 elsif v_deptno = 90 then13 v_increment := 2000;14 else15 v_increment := 2500;16 end if;17 update employees set salary = salary + v_increment where employee_id = v_empno;18 end;19Enter value for x: 110old 6: v_empno := &x;new 6: v_empno := 110;PL/SQL procedure successfully completed.条件为null时的处理:由于plsql的逻辑值有true、false和null三种。所以在进行条件判断的时候还要考虑null的情况。为了避免条件为null时产生歧义,应该在进行条件是否为null的检查,对条件为null、true和false三种情况都进行处理。SQL> declare2 v_number1 number;3 v_number2 number := 150;4 v_result char(20);5 begin6 if v_number1 is null or v_number2 is null then7 v_result := 'UNKNOW';8 elsif v_number1 > v_number2 then --v_number1 is null9 v_result := 'YES';10 else11 v_result := 'NO';12 end if;13 dbms_output.put_line(v_result);14 end;15 /UNKNOWPL/SQL procedure successfully completed.
文章转载自夜说是如何炼成的,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




