控制结构
介绍
pl/sql中的控制结构:条件语句、循环结构、顺序控制结构……
1)条件分支语句
pl/sql中提供了是三种条件分支语句if--then,if--then--else,if--then--elsif--then--else
a.简单的条件判断if--then
?编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加
10%
create or replace procedure xf_pro1(xfName varchar2) is
--定义
v_sal emp.sal%type;
begin
--执行
select sal into v_sal from emp where ename=xfName;
--判断if v_sal<2000 thenupdate emp set sal=sal+sal*10% where ename=xfName;end if;
end;
--调用
exec xf_pro1('SCOTT');
b.二重条件分支if--then-else
?编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加
100;如果补助为0就把补助设为200;
create or replace procedure xf_pro2(xfName varchar2) is
v_comm emp.comm%type;
begin
select comm into v_comm from emp where ename=xfName;
if v_comm<>0 then--<>表示不等于
update emp set comm=comm+100 where ename=xfName;
else
update emp set comm=200 where ename=spName;
end if;
end;
c.多重条件分支if--then--elsif--then--else
?编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增
加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其他职位的雇员工资增加
200。
create or replace procedure xf_pro3(xfNo number) is
v_job emp.job%type;
begin
select job into v_job from emp where empno=xfNo;
if v_job='PRESIDENT' then
update emp set sal=sal+1000 where empno=xfNo;
elsif v_job='MANAGER' then
update emp set sal=sal+500 where empno=xfNo;
else
update emp set sal=sal+200 where empno=xfNo;
end if;
end;
2)循环语句
a.loop循环
loop是pl/sql中最简单的循环语句,这种语句以loop开头,以end loop结尾,循环体内容至少
被执行一次。
现在有一张表,结构如下:
用户id 用户名
请编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加
create table users(userNo number,userName varchar2(40));create or replace procedure xf_pro4(xfName varchar2) isv_num number:=1;beginloopinsert into users values(v_num,xfName);exit when v_num=10;v_num:=v_num+1;end loop;end;exec xf_pro4('xiaofei');b.while循环对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while...loop开始,以end loop结束。案例同上create or replace procedure xf_pro5(xfName varchar2) isv_num number:=11;beginwhile v_num<=20 loopinsert into users values(v_num,xfName);v_num:=v_num+1;end loop;end;c.for循环(不推荐使用)for循环的基本结构如下:beginfor i in reverse 21..30 loopinsert into users values(i,'xiaofei');end loop;end;可以看出,控制变量i在隐含中不停增加
3)顺序控制语句goto,null
a.goto语句
goto语句用于跳转到特定符号去执行语句。注意由于使用goto语句会增加程序的复杂性,并
使得应用程序可读性变差,所以在做一般应用程序开发时,不建议使用goto语句。(多重循环可
以适当使用)
基本语法如下:goto lable,期中lable是已经定义好的标号名。
declare
i 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;b.nullnull语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性。例:declare
v_sal emp.sal%type;v_ename emp.ename%type;beginselect ename,sal into v_ename,v_sal from emp where empno=&no;if v_sal<3000 thenupdate emp set comm=sal*0.1 where ename=v_ename;elsenull;end if;end;