文章目录
一、条件分支语句
1. if语句
(1)- if - then - end if
(2)- if - then - else - end if
(3)- if - then - elseif - end if
2. case语句
(1)案例1:薪资最高员工所在部门
declare
v_var varchar2(20);
v_deptno emp.deptno%type;
begin
select deptno into v_deptno
from emp
where sal=(select max(sal) from emp);
v_var:=
case v_deptno
when 10 then '部门1'
when 20 then '部门2'
else '部门3'
end;
dbms_output.put_line('部门编号是:'||v_var);
end;
(2)案例2:查看平均工资是否达标
declare
v_var varchar2(20);
v_sal emp.sal%type;
begin
select avg(sal) into v_sal from emp
v_var:=
case
when v_sal<1000 then '薪水太低'
when v_sal>=1000 and v_sal<2000 then '起步薪水'
else '已步入软件行业'
end;
dbms_output.put_line(v_var);
end;
二、循环语句
1. loop:无条件循环
loop --声明循环
exit when --退出循环条件
declare
v_count number(2):=1; --循环变量的初始化
v_empno emp.empno%type;
v_name emp.ename%type:='张三';
v_job emp.job%type:='研发';
begin
--查询最大的员工编号
select max(empno) into v_empno from emp;
--循环添加数据
loop
insert into emp(empno,ename,jjob)
values((v_empno+v_count),v_name,v_job);
--变量的叠加
v_count:=v_count+1;
--循环条件判断
exit when c_count>3;
end loop;
end;
2. for:有计数的循环
counter无需声明
declare
v_empno emp.empno%type;
v_enae emp.ename%type:='李四';
v_job emp.job%type:='市场';
begin
--查询最大的员工编号
select max(empno) into v_empno from emp;
--批量添加数据
for v_count in 1..3 loop
insert into emp(empno,ename,job)
values((v_empno+v_count),v_name,v_job);
end loop;
end;
3. while:有条件循环
declare
v_count number(2):=1;--变量的初始化
v_empno emp.empno%type;
v_ename emp.ename%type:='李四';
v_job emp.job%type:='市场';
begin
--查询最大的员工编号
select max(empno) into v_empno from emp;
--while的循环体
while v_count<=3 loop
insert into emp(empno,ename,job)
values((v_empno+v_count),v_ename,v_job);
--变量的叠加
v_count:=v_count+1;
end loop;
end;
4. exit:强制退出循环
三、案例:NULL的处理
1. 案例1:null与数值进行比较
declare
v_x number(2):=5;
v_y number(2):=null;
begin
if v_x!=v_y then
dbms_output.put_line(100);
else
dbms_output.put_line(200);
end if;
end;
--结果:200 原因:null值与数字比较返回false
2. 案例2:null与null进行比较
declare
v_x number(2):=null;
v_y number(2):=null;
begin
if v_x=v_y then
dbms_output.put_line(100);
else
dbms_output.put_line(200);
end if;
end;
--结果:200 原因:null值与null值比较返回false
根据以上两个案例总结:null值无论与什么用=比较,返回的都是false
3. 案例3:对null做处理(nvl)
declare
v_x number(2):=5;
v_y number(2):=null;
begin
if nvl(v_x,0)!=nvl(v_y,0) then
dbms_output.put_line(100);
else
dbms_output.put_line(200);
end if;
end;
--结果:100
4. 案例4:判断一个值是否为null
declare
v_x number(2):=null;
begin
if v_x is null then
dbms_output.put_line(100);
else
dbms_output.put_line(200);
end if;
end;
--结果:100
四、false、true、null的逻辑表
组合 | 结果 |
---|---|
true and null | null |
false and null | false |
true or null | true |
false or null | null |