PLSQL-编写控制结构

一、条件分支语句

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 nullnull
false and nullfalse
true or nulltrue
false or nullnull
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值