Oracle - 存储过程和存储函数

提前编译好的一段pl/sql语言,放置在数据库端,可以直接被调用.这一段pl/sql一般都是固定步骤的业务.

语法:

create [or rplace] procedure 过程名(Name in type,…)

as

begin

end;

--给指定员工涨100工资
create or replace procedure p1(eno emp.empno%type)--创建
as
begin

update emp set sal = sal+100 where empno = eno;

commit;

end;

--测试p1
declare

begin
	p1(7788);
end;

存储函数

语法:

create [or rplace] functioon 函数名(Name in type,…) return 数据类型

is 结果变量 数据类型

begin

return (结果变量)

end;

--计算指定员工的年薪
create or replace function f_yearsal (eno emp.empno%type) return number --不能定义长度
is s number(10)
begin
	select sal * 12+nvl(comm,0) into s from emp where empno = eno;
	return s;
end;

存储过程存储函数的_参数_, 都不能带长度,存储函数的_返回值_类型不能带长度

存储函数的_返回值_需要接受

out类型参数

--计算年薪
create or replace procedure p_yearsal(eno in emp.empno%type,yearsal out number )
is
	s number(10);
	s emp.comm%type;
begin
	select sal*12,nvl(comm,0) into s,c from emp where empno = eno;
	yearsal := s+c;
end;
declare
	yearsal number(10)
begin
	p_yearsal(7788,yearsal);
	dbms_output.put_line(yearsal);
end;

in 和 out类型参数的区别

涉及到into 查询语句的赋值, 或 :=操作赋值, 都必须使用out修饰

区别

存储过程于存储函数的取别

语法:

  • 关键字不同
  • 存储函数比存储过程比多了2个out [本质]
    • 存储函数有_返回值_, 存储过程没有_返回值_, 只有存储函数可以自定义函数
      • select 函数名(参数) from 表名;
posted @ 2020-06-27 17:46  无谋  阅读(75)  评论(0)    收藏  举报