区别:存储过程没有返回值,  存储函数有返回值(他们都可以通过out参数输出返回值,所以这句话到后边就不太对了)

存储过程和存储函数现在已经是一回事了,只是老版本的数据库里两者有区分,为了兼容老版本所以还分开称呼

一,存储过程

 1,打印Hello World:没有参数的存储过程,名字后不带()

create or replace procedure sayhello as
begin
  dbms_output.put_line('Hello!');
end;

2,带参数的存储过程,不commit事物,水调用谁commit (in:输入参数,out 输出参数)

create or replace procedure raiseSalary(eno in number)
as
  --变量
  psal emp2.sal%type;
begin
  --得到涨薪前的工资
  select sal into psal from emp2 where empno=eno;

  --涨工资
  update emp2 set sal=sal+100 where empno=eno;

  --此处不用commit ,谁调用谁commit

  --打印
  dbms_output.put_line('涨工资前薪水:'||psal||',涨工资后薪水:'||(psal+100));

end;

调用时候提交事物 commit

二、存储函数

例子一:查询某个员工的年薪

create or replace function queryEmpImcome(eno in number)
return number
as

  --变量
  psal emp.sal%type;
  pcomm emp.comm%type;
begin
  select sal,comm into psal,pcomm from emp where empno=eno;
  return (psal+nvl(pcomm,0))*12;

end;

过程和函数中的in 、out 参数

所以现在意义上,过程和函数就是一回事

例子:查询某个员工的姓名、薪水、工种,  使用存储过程实现

/*
 查询某个员工的姓名,薪水,职位  
*/
create or replace procedure queryEmpInfo(eno in number,
                               pename out varchar2,
                               psal out number,
                               pjob out varchar2) 
as

begin
  select ename,sal,job into pename,psal,pjob from emp where empno=eno;                        
end;

plsql测试:

选择存储过程、还是存储函数?

 

 

 

欢迎关注个人公众号一起交流学习: