精通Oracle10编程SQL(7)编写控制结构
数据库  /  管理员 发布于 3年前   174
/* *编写控制结构 */ --条件分支语句--简单条件判断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;
博主 在
2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..xiaoB 在
2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..BUG4 在
你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..博主 在
go语言+beego框架中获取get,post请求的所有参数中评论 @ t1 直接在router.go文件中配就ok..Jade 在
如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号