Oracle存储过程和存储函数创建方法(详解)
select*fromemp;
-----------------存储过程------------------------
--定义
create[orreplace]procedure存储过程名称(参数名[in]/out数据类型)
is/as
begin
--逻辑表达式
end[存储过程名称];
--定义存储过程计算年薪,并答应输出
createorreplaceprocedureproc_salyears(v_noinnumber)
is
sal_yearsnumber(9,2);
begin
--计算年薪
selectsal*12+nvl(comm,0)intosal_yearsfromempwhereempno=v_no;
--输出
dbms_output.put_line(sal_years);
end;
--调用存储过程
方式1:
callproc_salyears(7788);
方式2:
begin
proc_salyears(7369);
end;
--out参数的存储过程
--计算年薪并返回
createorreplaceprocedureproc_salyears(v_noinnumber,sal_yearsoutnumber)
is
begin
--计算年薪
selectsal*12+nvl(comm,0)intosal_yearsfromempwhereempno=v_no;
end;
--调用存储过程
declare
v_salnumber(9,2);
begin
proc_salyears(7876,v_sal);
dbms_output.put_line(v_sal);
end;
-----------------存储函数------------
--定义
createorreplacefunction存储函数名(参数名in/out数据类型)
return数据类型
is|as
begin
return具体的数据;
end[存储函数名称];
--定义存储函数名计算年薪
createorreplacefunctionfun_salyears(f_nonumber)
returnnumber
is
sal_yearsnumber(9,2);
begin
selectsal*12+nvl(comm,0)intosal_yearsfromempwhereempno=f_no;
returnsal_years;
end;
--使用存储函数
declare
sal_yeatsnumber(9,2);
begin
sal_yeats:=fun_salyears(7876);
dbms_output.put_line(sal_yeats);
end;
--可简写
begin
dbms_output.put_line(fun_salyears(7369));
end;
--------存储过程和存储函数的区别--------
存储过程多用于项目之间的数据共享,存储函数多被存储过程调用.
存储函数可以再sql语句中调用,存储过程不能.