日期:2014-05-16  浏览次数:20424 次

oracle(5)控制语句

所有编程语言都离不开控制语句,Oracle也为PL/SQL编程提供了基本的控制语句

  • 条件语句
  • 循环语句
  • 顺序控制语句

-------------------------------条件语句-----------------------------------

控制语句
pl/sql中提供三种条件分支语句
if--then,
if--then---else,
if--then---elsif---then---else

上面三种语句一一应java中
if(){}
if(){}else{}
if(){}else if{}else{}

案例1 (if--then)
--编写一个过程,可以输入一个雇员名,如果该雇员的工资低于
--2000,就给该雇员名工资增加10%

create or replace procedure sp_pro6(spName varchar2) is
--定义
v_sal emp.sal%type;
begin
--执行
select sal into v_sal from emp where ename=spName;
--判断
if v_sal<2000 then
update emp set sal=sal+sal*10% where ename=spName;
end if;
end;

exec sp_pro6('SCOTT');


案例2 (if--then---else)
--编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0
--就在原来的基础上增加100;如果补助为0就把补助设为200

create or replace procedure sp_pro6(spName varchar2) is
--定义
v_comm emp.comm%type;
begin
--执行
select comm into v_comm from emp where ename=spName;
--判断
if v_comm<>0 then
update emp set comm = comm+100 where ename=spName;
else
update emp set comm = comm+200 where ename=spName;
end if;
end;

exec sp_pro6('SCOTT');

案例3 (if--then---elsif---then---else)
--编写一个过程,可以输入一个雇员编号,如果该雇员的职位是president就给他的工资增加1000,
如果该雇员的职位是manager就给他的工资增加500,其它职位的雇员工工资增加200

create or replace procedure sp_pro6(spNo number) is
--定义
v_job emp.job%type;
begin
--执行
select job into v_job from emp where empno=spNo;
if v_job='president' then
update emp set sal=sal+1000 where empno=spNo;
elsif v_job='manager' then
update emp set sal=sal+500 where empno=spNo;
else
update emp set sal=sal+200 where empno=spNo;
end if;
end;

-------------------------------循环语句-----------------------------------
循环语句
loop循环 以loop开头以end loop结尾,这种循环至少会被执行一次
while循环 基本循环至少要执行循环体一次,而对于while循环来说,只有条件为true时,才会
          执行循环体语句,while循环以while...loop开始以end loop结束
for循环语句

案例(loop循环)
--请,编写一个过程,可输入用户名,并循环添加10个用户到
--users表中,用户编号从1开始增加
create or replace procedure sp_pro6(spName varchar2) is
--定义  :=表示赋值
v_num number:=1;
begin
loop
    insert into users value(v_num,spName);
    --判断是否要退出循环
    exit when v_num=10;
    --自增  pl/sql没有java中v_num++这种语法
    v_num:=v_num+1;
end loop;
end;

案例(while循环)
--请,编写一个过程,可输入用户名,并循环添加10个用户到
--users表中,用户编号从11开始增加

create or replace procedure sp_pro6(spName varchar2) is
--定义  :=表示赋值
v_num number:=11;
begin
while v_num<=20 loop
--执行
     insert into users value(v_num,spName);
     v_num:=num+1;
end loop;
end;


for循环语句(不建议使用for  前面两种循环语句已满足要求)
基本结构如下:
begin
    for i in reverse 1..10 loop
    insert into users values(i,'kyle');
    end loop;
end;
说明:控制变量i,在隐含中就在不停的增加


-------------------------------顺序控制语句-----------------------------------
goto 、null

goto语句 用户跳转到特定标号去执行语句,注意由于使用goto语句会增加程序的复杂性,
并使用应用程序可读性变差,所以在做一般应用开发时,建议不要使用goto语句
基本语法如下 goto lable,其中lable是已经定义好的标号名

declare
i int :=1;
begin
  loop
  dbms_output.put.line('输出i='||i);
  if i=10 then
  goto end_loop;
  end if;
  i:=i+1;
  end loop;
  <<end_loop>>
  dbms_output.put_line('循环结束');
  end;


  null语句不会执行任何操作,并且会直接将控制传递到下一条语句。
  使用null语句的主要好处是可以提高pl/sql的可读性
  declare
  v_sal emp.sal%type;
  v_ename emp.ename%type;
  begin
  select ename,sal into v_e