存储过程
过程用于执行特定的操作。当建立过程时,即可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以将数据传递到执行部分;通过输出参数,可以将执行部分的数据传递到应用环境。
可以使用create or replace procedure命令来创建过程。
实例1
①请编写一个过程,可以输入雇员名,新工资,用以修改该雇员的工资 ②如何调用过程?(2种方法) ---> exec、call ③如何在java、.net中调用储存过程 create or replace procedure(name varchar2, newSal number) example3 is --定义变量部分放在is和begin之间 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;