oracle学习笔记16--PLSQL3
--编写一个过程,可以输入一个雇员名,如果该雇员的薪水低于2000,就给该雇员的薪水加上10%--if...then--....--end if;create or replace procedure morf_pro10(mename varchar2) isv_sal myemp.sal%type;beginselect sal into v_sal from myemp where ename=mename;if v_sal<2000 then update myemp set sal=sal*1.1 where ename=mename;end if;end;
--编写一个过程,输入雇员名,如果该雇员的补助不是0,就在原来的基础上加100,如果补助为0,就设为200.--if...then--....--else--...--end if;create or replace procedure morf_pro11(mename varchar2) isv_comm myemp.comm%type;beginselect comm into v_comm from myemp where ename=mename;if v_comm<>0 then update myemp set comm=comm+100 where ename=mename;elseupdate myemp set comm=200 where ename=mename;end if;end;
--多重分支实例--编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT,就给他的工资增加1000,--如果该雇员的职位是MANAGER,就给他的工资增加500,其他职位的雇员工资增加200create or replace procedure morf_pro12(mempno number) is--定义部分v_job myemp.job%type;begin--执行部分select job into v_job from myemp where empno=mempno;if v_job='PRESIDENT' thenupdate myemp set sal=sal+1000 where empno=mempno;elsif v_job='MANAGER' thenupdate myemp set sal=sal+500 where empno=mempno;elseupdate myemp set sal=sal+200 where empno=mempno;end if;end;
--loop--...--end loop;--循环体至少执行一次--编写一个过程,可输入用户名,并循环添加10个用户到tuser表中,用户编号从1开始增加create table tuser(uno number,uname varchar2(40));create or replace procedure morf_pro13(mname varchar2) isv_num number:=1;beginloopinsert into tuser values(v_num,mname);exit when v_num=10;v_num:=v_num+1;end loop;end;
--while循环--只有条件为true时才执行循环体--编写一个过程为tuser表添加10个用户,编号从11开始create or replace procedure morf_pro14(mname varchar2) isv_num number:=11;beginwhile v_num<=20 loopinsert into tuser values(v_num,mname);v_num:=v_num+1;end loop;end;
--for循环个人感觉不好用,给个简单例子beginfor i in reverse 1..10 loopinsert into tuser values(i,'嘿嘿');end loop;end;
--goto语句的使用declarei int:=1;beginloopdbms_output.put_line('输出i='||i);if i=10 thengoto end_loop;end if;i:=i+1;end loop;<<end_loop>>dbms_output.put_line('循环结束');end;
--null语句,不会执行任何操作,并且会直接将控制传递到下一条语句,--使用null语句的主要好处是可以提高pl/sql的可读性create or replace procedure morf_pro15(mename varchar2) isv_sal myemp.sal%type;beginselect sal into v_sal from myemp where ename=mename;if v_sal<2000 then update myemp set sal=sal*1.1 where ename=mename;elsenull;end if;end;