pl/sql编程(四)存储过程、包

存储过程

过程用于执行特定的操作。当建立过程时,即可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以将数据传递到执行部分;通过输出参数,可以将执行部分的数据传递到应用环境。

可以使用create or replace procedure命令来创建过程。

实例1

①请编写一个过程,可以输入雇员名,新工资,用以修改该雇员的工资

②如何调用过程?(2种方法) ---> exec、call

③如何在java、.net中调用储存过程

create or replace procedure(name varchar2, newSal number) example3 is

--定义变量部分放在isbegin之间

begin

--执行部分

--根据用户名修改工资

update emp set sal=newSal where ename=name;

end;

上例子:
例子一:
create or replace procedure ChangeAvgsalpro(d_deptno in number) is
  type cur_type is ref cursor;
  cur cur_type;
  avgSal number(15,2);
  emp_row emp%rowType;
begin
  open cur for
  select *  from emp where emp.deptno=d_deptno;
  
  select avg(sal) into avgSal from emp where emp.deptno=d_deptno;
  loop
    fetch cur into emp_row;
    exit when cur%notfound;
    if emp_row.sal<avgSal then
      update emp set sal=avgsal where emp.empno=emp_row.empno;
    end if;
    
  end loop;

  commit;
end ChangeAvgsalpro;

-----测试:
declare 
   
begin
   changeavgsalpro(10); 
end;
例子二:
create or replace procedure
 Procedure_1(d_deptno in number,result out mypackage.cur_type) is
begin
  open result for 
  select e.empno,e.ename,e.sal,a.s,e.sal-a.s nsal   from emp e ,
  (select avg(sal) s,deptno from emp where emp.deptno=d_deptno group by deptno)a
where e.deptno=a.deptno  ;

end Procedure_1;

-----包:
create or replace package mypackage
is
 type cur_type is ref cursor;
end mypackage;
------------------------测试:
-- Created on 2015/8/26 by ADMINISTRATOR 
declare 
   cur mypackage.cur_type;
   type rec is  record(e_empno number(15),e_ename varchar2(20),e_sal number(15,2),
   avgsal number(15,2),nsal number(15,2));
   result rec;
begin
   procedure_1(20,cur);
   
   loop
     fetch cur into result;
     exit when cur%notfound;
     dbms_output.put_line(result.e_empno||':'||result.nsal);
   end loop;
end;



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值