您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 玩转Oracle-PLSQL控制结构
Ⅰ、介绍:条件,循环,顺序控制结构;Ⅱ、条件分支语句;if--then,if--then--else,if--then--elseif--else;㈠、简单的判断语句;SQL--编写一个过程,可以输入一个员工名,SQL--如果该员工工资低于2000,就给该员工增加10%;SQLcreateorreplaceproceduremypro(spNamevarchar2)is2--定义;3v_salemp.sal%type;4begin5--执行6selectsalintov_salfromempwhereename=spName;7--判断;8ifv_sal2000then9updateempsetsal=sal*1.1whereename=spName;10endif;11end;121314/Procedurecreated.㈡、二重条件分支:if--then--else;--编写一个过程,可以输入一个雇员名,--如果该雇员名的补助不是0,就在原有的基础上增加100,--如果没有补助,就把补助设置为200;SQLcreateorreplaceproceduremypro(spNamevarchar2)is2--define3v_commemp.comm%type;4begin5--执行;6selectcommintov_commfromempwhereename=spName;78--判断;9ifv_comm0then10updateempsetcomm=comm+100whereename=spName;11else12updateempsetcomm=comm+200whereename=spName;13endif;14end;15/Procedurecreated.注意:oraclepl/sql中的不等于是而不是!=;㈢、多重条件分支;if--then--elsif--else;注意:s是elsif而不是elseif;SQL--编写一个过程,可以输入雇员号,如果该雇员的职位是PRESIDENT,SQL--借给他增加1000工资,如果是manager,就增加500,SQL--如果是其他就增加200;SQLSQLcreateorreplaceproceduremypro(spNonumber)is2--define3v_jobemp.job%type;4begin5--执行;6selectjobintov_jobfromempwhereempno=spNo;78--判断;9ifv_job='PRESIDENT'then10updateempsetsal=sal+1000whereempno=spNo;11elsifv_job='MANAGER'then12updateempsetsal=sal+500whereempno=spNo;13else14updateempsetsal=sal+200whereempno=spNo;15endif;16end;17/Procedurecreated.Ⅲ、循环语句:loop㈠简单循环:loop;这种循环以loop开头,以endloop结尾,至少被执行一次;SQL--现在有一张表用户id,用户名;SQL--编写一个过程,可以输入用户名,SQL--并添加10个用户到表中,用户编号从1开始;SQLSQL--创建用户表;SQLcreatetableusers(idnumber(3),namevarchar2(5));Tablecreated.SQL--创建过程;SQLcreateorreplaceproceduremypro(spNamevarchar2)is2--定义部分;3--定义循环的次数;4v_numnumber:=1;5begin6--执行部分;7--循环;8loop9insertintousersvalues(v_num,spName);10--判断是否要推出循环;11--注意,判断是否相等用=,而赋值的时候用:=;12exitwhenv_num=10;13--自增;14--注意,判断是否相等用=,而赋值的时候用:=;15v_num:=v_num+1;16endloop;17end;18/Procedurecreated.㈡、while循环;基本循环至少要执行一次,而对于while循环来说,只有条件为true时候,才会执行循环体语句,while循环以while,loop开始,以endloop结束;SQL--编写一个过程,可以输入用户名,SQL--并添加10个用户到表中,用户编号从11开始;SQLSQL--创建过程;SQLcreateorreplaceproceduremypro(spNamevarchar2)is2--定义部分;3--定义循环的次数;4v_numnumber:=11;5begin6--执行部分;7--循环;8whilev_num=20loop9insertintousersvalues(v_num,spName);10--自增;11--注意,判断是否相等用=,而赋值的时候用:=;12v_num:=v_num+1;13endloop;14end;15/Procedurecreated.㈢、for循环;结构如下:beginforiinreverse21..30loopinsertintousersvalues(i,'zhao');endloop;end;我们可以看到,控制变量在隐含中就会不停的增加;SQLbegin2foriinreverse21..30loop3insertintousersvalues(i,'zhao');4endloop;5end;6/PL/SQLproceduresuccessfullycompleted.Ⅳ、顺序控制语句:goto,null;㈠、goto语句:用于跳转到特定符号去执行语句,注意由于使用goto语句会增加程序的发杂度,并使得程序的可读性较差,所以建议大家不适用goto语句;SQLsetserveroutputon;SQLdeclare2iint:=1;3begin4loop5dbms_output.put_line('OUtput:'||i);6ifi=10then7gotoend_loop;8endif;9i:=i+1;10endloop;11end_loop12dbms_output.put_line('LoopEND!');13end;14/OUtput:1OUtput:2OUtput:3OUtput:4OUtput:5OUtput:6OUtput:7OUtput:8OUtput:9OUtput:10LoopEND!㈡、null:null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null主要是为了提高pl/sql的可读性;SQLcreateorreplaceproceduremyprois2v_salemp.sal%type;3v_enameemp.ename%type;4begin5selectename,salintov_ename,v_sal6fromempwhereempno=&no;7ifv_sal3000then8updateempsetcomm=sal*0.1whereename=v_ename;9else10null;11endif;12end;13/Entervalueforno:7788old6:fromempwhereempno=&no;new6:fromempwhereempno=7788;Procedurecreated.PL/SQLproceduresuccessfullycompleted.
本文标题:玩转Oracle-PLSQL控制结构
链接地址:https://www.777doc.com/doc-14177 .html