第12课 pl/sql控制语句

来源:互联网 发布:淘宝买家秀在哪里 编辑:程序博客网 时间:2024/06/06 03:48

Pl/sql控制语句:

1,条件分支:if….then;   if….then….else;   if…..then…elsif…then  .else;

  例1:编写一个过程,可以输入一个雇员的姓名,如果他的工资低于2000,就给该雇员工资增加10%;

       create   or   replace   procedure   sp_06(spname   varchar2)  is

v_salemp.sal%type;

begin

select   sal   into   v_sal    from  emp   where ename=spname;

if   v_sal<2000  then

update    emp   set  sal=sal*1.1  where   ename=spname;

endif;

 

end;

/

说明:定义变量时%type标明该变量为%前面数据的类型,参数%rowtype标明变量为一个数据结构,类型为%前面数据结构类型;

     参数%not  foundupdate,select等时有没找到

        sqlerrm(。。。)是一个什么函数?
 ---
出错时oracle会自动产生出错信息,可以根据这个来判断错在那里??

 

例2:编写一个过程,可以输入一个雇员的姓名,如果他的工资低于2000,就给该雇员工资增加10%,否则增加5%;

create   or   replace   procedure   sp_06(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*1.1where    ename=spname;

else

update   emp   set    sal=sal*1.05   where   ename=spname;

endif;

end;

/

例3:编写一个过程,可以输入一个雇员的姓名,如果他的工资低于1000,就给该雇员工资增加10%,低于2000增加5%,否则增加%3;

create   or   replace    procedure    sp_06(spname   varchar2)  is

v_salemp.sal%type;

begin

select   sal    into    v_sal    from     emp    where   ename=spname;

if   v_sal<1000   then

update   emp    set   sal=sal*1.1   where     name=spname;

elsif sal<2000  then 

update    emp    set    sal=sal*1.05   where    ename=spname;

else

update   emp   set    sal=sal*1.03   where    ename=spname;

 

endif;

 

end;

/

2 循环语句

   Loop

1:编写一个过程,可以输入用户名,并循环添加10个用户到用户表users中;

   A:创建表: create    table  users values(unamevarchar2(30),usid number(7));

 B :创建过程;

 

create   or   replace      procedure    sp_06(spname   varchar2)  is

begin

loop

 insert   into    users    values(spname,i);

 exit    when   i=10;

 i:=i+1;

end   loop;

end;

/

例2:用whlie循环添加第11个到20个用户到users中

create   or   replace    procedure    sp_07(spname    varchar2)is

i    number:=11;

 

begin

whilei<=20   loop

 insert   into    user    svalues(spname,i);

 

 i:=i+1;

end   loop;

end;

/

 

例3:用for循环插入第20个到30个到user中;

create   or   replace   procedure    sp_08   is

 

begin

for  i    inreverse    1...10   loop

 insert   into    users    values('xt',i);

 

endloop;

end;

/

 

这个过程有点问题,不要用for循环

 

顺序控制语句 goto 这个很少用

Null:  表示什么都不做,用他到控制语句中只是增加程序的可读性;

 

 

编写过程时注意 参数表中的in 表示输入参数, out 表示输出参数,必须标明;

 

在java中调用过程sp_07,在表users中增加记录:如下:

 

try{eStatementcs=ct.prepareCall("call sp_pro3(?,?)");

               CallableStatementcs=ct.prepareCall("call sp_07(?)");

               Class.forName("oracle.jdbc.driver.OracleDriver");

               Connectionct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora","scott","tiger");

               //Callabl

               cs.setString(1,"SMITH");

               //cs.setInt(2,10);

               cs.execute();

               cs.close();

               ct.close();

        }catch(Exception e)

        {

               e.printStackTrace();

              

        }

 



原创粉丝点击