区别:存储过程没有返回值, 存储函数有返回值(他们都可以通过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测试:
选择存储过程、还是存储函数?