精通Oracle10编程SQL(7)编写控制结构
数据库  /  管理员 发布于 5年前   311
/* *编写控制结构 */ --条件分支语句--简单条件判断DECLARE v_sal NUMBER(6,2);BEGIN select sal into v_sal from emp where lower(ename)=lower('&name'); if v_sal<2000 then update emp set sal=v_sal+200 where lower(ename)=lower('&name'); end if;end;select * from emp;--二重条件分支--如果雇员补助不是0,则在原来的基础上增加100元,如果补助为0或NULL时,则设置其补助为200元DECLARE v_comm NUMBER(6,2);BEGIN select comm into v_comm from emp where empno=&no; if v_comm <> 0 then update emp set comm=v_comm+100 where empno=&no; else update emp set comm=200 where empno=&no; end if;end;--多重条件分支DECLARE v_job VARCHAR2(10); v_sal NUMBER(6,2);BEGIN SELECT JOB,SAL INTO v_job,v_sal from emp where empno=&no; if upper(v_job)=upper('president') then update emp set sal=v_sal+1000 where empno=&no; elsif upper(v_job)=upper('manager') then update emp set sal=v_sal+500 where empno=&no; else update emp set sal=v_sal+200 where empno=&no; end if;END;select * from emp;--CASE语句--在CASE语句中使用单一选择符进行等值比较DECLARE v_deptno emp.deptno%TYPE;begin v_deptno:=&no; case v_deptno when 1 then update emp set comm=100 where deptno=v_deptno; when 2 then update emp set comm=80 where deptno=v_deptno; when 3 then update emp set comm=50 where deptno=v_deptno; else dbms_output.put_line('不存在该部门'); end case;end;select * from emp;--在CASE语句中使用多种条件比较DECLARE v_sal emp.sal%TYPE; v_ename emp.ename%TYPE;begin select ename,sal into v_ename,v_sal from emp where empno=&no; case when v_sal<1000 then update emp set comm=100 where ename=v_ename; when v_sal<2000 then update emp set comm=90 where ename=v_ename; when v_sal<6000 then update emp set comm=50 where ename=v_ename; end case;end;select * from emp;--循环语句--基本循环create table temp(cola int);DECLARE i INT:=1;begin LOOP insert into temp values(i); exit when i=10; i:=i+1; end loop;end;select * from temp;--WHILE循环DECLARE i INT:=1;begin while i<=10 loop insert into temp values(i); i:=i+1; end loop;end;--FOR循环begin for i in reverse 1..10 LOOP insert into temp values(i); end loop;end;--嵌套循环和标号DECLARE result int;BEGIN <<outer>> for i in 1..100 loop <<inter>> for j in 1..100 loop result:=i*j; exit outer when result=1000; exit when result=500; end loop inner; dbms_output.put_line(result); end loop outer; dbms_output.put_line(result);end;--顺序控制语句--GOTODECLARE i INT:=1;begin LOOP INSERT INTO temp values(i); if i=10 then goto end_loop; end if; i:=i+1; end loop; <<end_loop>> dbms_output.put_line('循环结束');END;--NULL--NULL语句不会执行任何操作,并且会直接将控制传递到下一条语句--使用NULL语句的主要好处是可以提高PL/SQL程序的可读性--如果雇员工资低于300,则将其补助设置为工资的10%,如果雇员工资高于3000,则不会执行任何操作(NULL)DECLARE v_sal emp.sal%TYPE; v_ename emp.ename%TYPE;BEGIN select ename,sal into v_ename,v_sal from emp where empno=&no; if v_sal<300 then update emp set comm=sal*0.1 where ename=v_ename; else null; end if;end;select * from emp;
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号