第12课 pl/sql控制语句

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();

              

        }

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值