当前位置: 代码迷 >> SQL >> PLSQL中的流程统制和循环语句
  详细解决方案

PLSQL中的流程统制和循环语句

热度:79   发布时间:2016-05-05 11:06:45.0
PLSQL中的流程控制和循环语句

流程控制

条件分支语句用于依据特定情况选择要执行的操作,PL/SQL提供了三种条件分支语句:if-then,if-then-else,if-then-else –then-else end if;

A:简单条件判断:

简单条件判断用于执行单一条件判断,如果满足特定条件,则会执行相应操作:如果不满足条件则会退出下面我们用scott登陆用emp表举列子如下;

--简单的条件判断 if then

--问题:编写一个过程,可以输入一个雇员名,

?

--如果该雇员的工资低于2000,就给该员工工资增加10%

Create or replace procedure por_1(v_ename varchar2) isV_sal emp.sal%type;BeginSelect sal into v_sal form emp where ename=v_ename;If v_sal<2000V_sal:=v_sal*0.1;Update emp set sal=v_sal where ename=_name;End if;End;

?如上所示,我们在调用这个过程的时候会这样 exec pro_(‘king’);执行之后king的工资就会在原来的基础上乘以0.1

B:二重条件分支

二重条件分支是指根据条件来选择两种可能性,

--问题:编写一个过程,可以输入一个雇员名,

--如果该雇员的补助不是0就在原来的基础上增加100

--如果补助为0就把补助设为200

create or replace procedure pro_2(v_ename varchar2) is  v_comm emp.comm%type;begin  select nvl(comm,0) into v_comm from emp where ename=v_ename;  dbms_output.put_line('comm:'||v_comm);    if v_comm<>0 then    v_comm:=v_comm+100;  else    v_comm:=200;  end if;  update emp set comm=v_comm where ename=v_ename; end;

?C:多重条件分支

多重条件分支用于执行最复杂的条件分支操作

--问题:编写一个过程,可以输入一个雇员编号,

--如果该雇员的职位是PRESIDENT就给他的工资增加1000

--如果该雇员的职位是MANAGER就给他的工资增加500

--其它职位的雇员工资增加200

Create or replace procedure pro_3(v_no number) isv_sal emp.sal%type;v_job emp.job%type;BeginSelect job,sal into v_job,v_sal from emp where empno=v_no;If  v_job=’ PRESIDENT’  then v_sal:=v_sal+1000;Else if v_job=’MANAGER’ thenv_SAL=v_sal+500;elsev_sal=v_sal+200;end if;end fiupdate emp set sal=v_sal where empno=v_empno;end;

?D:case 条件控制

Case语句可以说是多重条件语句的超级版,用于判断多条件时,比IF 的多重条件语句要好用点

--问题:编写一个过程,可以输入一个雇员编号,

--如果该雇员的职位是PRESIDENT就给他的工资增加1000

--如果该雇员的职位是MANAGER就给他的工资增加500

--CLERK? 300--ANALYST 增加200--SALESMAN 100

create or replace procedure pro_11(v_empno number) isv_job emp.job%type;v_sal emp.sal%type; begin   select job,sal into v_job,v_sal from emp where empno=v_empno;   case v_job     when 'PRESIDENT' then       v_sal:=v_sal+1000;       when 'MANAGER' then       v_sal:=v_sal+500;     when 'CLERK' then       v_sal:=v_sal+300;     when 'ANALYST' then       v_sal:=v_sal+200;     when 'SALESMAN' then       v_sal:=v_sal+100;     else       null;   end case;   --更新数据  update emp set sal=v_sal where empno=v_empno;end;

?循环

为了在编写pl/sql快中重复执行一条语句或者一组语句,可以使用循环控制结构。循环结构有基本循环,while循环,fro循环,下面我们来简单的结束使用这三种循环语句的用法。

A:基本循环

pl/sql中最简单格式的循环语句是基本循环语句格式如下:

Loop

…..执行代码

Exit when…..

End ??loop;

Declare

I int :=1;

Begin

Loop Insert into table_1 valuse(1);Exit when I:=10;I:=i+1;End loop;End;

?B:while 循环:

对于whil循环来说只有当条件为true时,才会执行循环列子如下:

DeclareI int :=1;Begin While i<10 loopInsert into table _1 loop;I :=i+1;End  loop;End;

?C:FOR 循环

FRO循环可以在某一个范围内遍历循环,当使用FOR循环时,Oracle会隐含定义循环变量举例:

BeginFor I in reverse 1…..10 loopInsert into table values(1);End loop;End;

?如上所示,当执行pl/sql快时,会为teble表插入10条记录,因为指定了Reverse选项,所以插入数据的顺序为10,9.8….1,

?

1 楼 Y_1746119035 前天  
一看这例子就知道是和我一个班的~ (*+﹏+*)~
  相关解决方案