配色: 字号:
第三章plsql 流程控制
2017-05-16 | 阅:  转:  |  分享 
  
流程控制语句PL/SQL的流程控制语句,包括如下三类:条件语句:if语句循环语句:loop语句,exit语句顺序语句:goto语句,null
语句一、条件语句方式一:if...then...endif;if...then...else...endif;if..
.then...elsif...else...endif;方式二:case...when...then...end;方式一1
.简单的条件判断if–then例:如果员工号为150号员工的工资低于2000,就给该雇员工资增加10%declarev_sa
lemployees.sal%type;beginselectsalaryintov_salfromemployees
whereemployee_id=150;ifv_sal<2000thenupdateemployeessetsa
lary=salary+salary10%whereemployee_id=150;endif;end;2.二重条件分支
if—then--else例:如果员工号为150号员工的工资低于2000,就给该雇员工资增加10%高于2000.就给该雇员工资增
加5%declarev_salemployees.sal%type;beginselectsalaryintov_sal
fromemployeeswhereemployee_id=150;ifv_sal<2000thenupdateem
ployeessetsalary=salary+salary10%whereemployee_id=150;elsif
v_sal>2000thenupdateemployeessetsalary=salary+salary5%wher
eemployee_id=150;endif;end;3.多重条件分支if--then--elsif--else例:查询出
150号员工的工资,若其工资大于或等于10000则打印''salary>=10000'';若在5000到1000
0之间,则打印''5000<=salary<10000'';否则打印''salary<5000''(方法一)decla
rev_salaryemployees.salary%type;beginselectsalaryintov_sala
ryfromemployeeswhereemployee_id=150;dbms_output.put_line(''
salary:''||v_salary);ifv_salary>=10000thendbms_output.pu
t_line(''salary>=10000'');elsifv_salary>=5000thendbms_outpu
t.put_line(''5000<=salary<10000'');elsedbms_output.put_line(''
salary<5000'');endif;(方法二)declarev_salaryemployees.salary%ty
pe;v_tempvarchar2(30);beginselectsalaryintov_salaryfrome
mployeeswhereemployee_id=150;Ifv_salary>=10000thenv_temp
:=''salary>=10000'';elsifv_salary>=5000)thenv_temp:=''5000<
=salary<10000'';elsev_temp:=''salary<5000'';endif;dbms_o
utput.put_line(v_salary||'',''||v_temp);end;方式二:case...when...t
hen..else...end例:查询出150号员工的工资,若其工资大于或等于10000则打印''salary>
=10000'';若在5000到10000之间,则打印''5000<=salary<10000'';否则打印''
salary<5000''declarev_salemployees.salary%type;v_tempvarchar
2(30);beginselectsalaryintov_salfromemployeeswhereemploy
ee_id=150;v_temp:=casetrunc(v_sal/5000)when0then''salar
y<5000''when1then''5000<=salary<10000''else''salary>=100
00''end;dbms_output.put_line(v_sal||'',''||v_temp);end;--case
不能向下面这样用(不能写范围)casev_salwhensalary>=10000thenv_temp:=''
>=10000''whensalary>=5000thenv_temp:=''5000<=salary<100
00''elsev_temp:=''salary<5000''end;例:查询出122号员工的JOB_ID,若
其值为''IT_PROG'',则打印''A'';''AC_MGT'',打印''B'',''AC_ACCOUNT'',打印''C
'';否则打印''D''declarev_job_idemployees.job_id%type;v_gradechar
(10);beginselectjob_idintov_job_idfromemployeeswhereemplo
yee_id=122;dbms_output.put_line(''job_id:''||v_job_id);v_gra
de:=casev_job_idwhen''IT_PROG''then''A''when''AC_MGT''then
''B''when''AC_ACCOUNT''then''C''else''D''end;dbms_output.put_lin
e(v_job_id||‘,’||v_grade);end;二.循环结构(三种)方式一:loop...exitwhe
n...endloop;方式二:while...loop...endloop;方式三:foriin...loop...e
ndloop;方式一:loop...exitwhen...endloop是pl/sql中最简单的循环语句,这种循环语
句以loop开头,以endloop结尾,这种循环至少会被执行一次.declare--初始化条件v_inumber(5)
:=1;beginloop--循环体dbms_output.put_line(v_i);--循环条件(当这个条件结束)e
xitwhenv_i=10;--迭代条件v_i:=v_i+1;endloop;end;例:现有一张users
表,createtableusers(usernonumber,usernamevarchar2(40));表结构如下用
户ID用户名编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加declarev_numnu
mber:=1beginloopinsertintousersvalues(v_num,spname);exit
whenv_num=10;v_num:=v_num+1;endloop;end;方式二:WHILE...LOOP...
ENDLOOP基本循环至少要执行循环体一次,而对于while循环来说,只有条件为true时,才会执行循环体语句,while循环
以while..loop开始,以endloop结束declare--初始化条件v_inumber(3):=1;beg
in--循环条件whilev_i<=10loop--循环体dbms_output.put_line(v_i);-
-迭代条件v_i:=v_i+1;endloop;end;案例:现有一张表users,表结构如下用户ID用户名例:编
写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从11开始增加.createproceduresp_p
ro6(spnamevarchar2)isv_numnumber:=1beginWhilev_num<=20loopi
nsertintousersvalues(v_num,spname);v_num:=v_num+1;endloop;en
d;方式三:for循环for循环计数器IN(reverse)下限..上限loop要执行的语句;Endloop;每循环一次,循
环变量自动加1,使用关键字reverse,循环变量自动减1。跟在inreverse后面的数字必须是从小到大的顺序,而且必须是整数
,不能是变量或表达式。可以使用Exit退出循环。例:beginforiin(reverse)1..10loopdbms_c
upput.put_line(i);endloop;end;三.顺序控制语句-goto,null①goto语句goto语句用于
跳转到特定标号去执行语句.注意由于使用goto语句会增加程序的复杂性,并使得应用程序可以读性变差,所以在做一般应用开发时,建议大家
不要使用goto语句.基本语法如下gotolable,其中lable是已经定义好的标号名,declareiint:=1;b
eginloopdbms_output.put_line(‘输出i=‘||i);ifi=10thengotoend_loop
;endif;i:=i+1;endloop;<>dbms_output.put_line(''循环结束'');
end;■顺序控制语句-goto,null②nullnull语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性,,declarev_salemp.sal%type;v_enameemp.ename%type;beginselectename,salintov_ename,v_salfromempwhereempno=&no;ifv_sal<3000thenupdateempsetcomm=sal0.1whereename=v_ename;elsenull;endif;end;
献花(0)
+1
(本文系胡小哈526首藏)