存储函数
create or replace function 函数名(Name in type, Name out type, ...) return 数据类型 is
结果变量 数据类型;
begin
return(结果变量);
end[函数名];
存储过程和存储函数的区别
一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。
但过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。
一般来讲,有一个返回值的时候用存储函数,多个返回值用存储过程。
范例:使用存储函数来查询指定员工的年薪
1 create or replace function empincome(eno in emp.empno%type) return number is 2 3 psal emp.sal%type; 4 5 pcomm emp.comm%type; 6 7 begin 8 9 select t.sal into psal from emp t where t.empno = eno; 10 11 return psal * 12 + nvl(pcomm, 0); 12 13 end;
使用存储过程来替换上面的例子
1 2 create or replace procedure empincomep(eno in emp.empno%type, income out number) is 3 4 psal emp.sal%type; 5 6 pcomm emp.comm%type; 7 8 begin 9 10 select t.sal, t.comm into psal, pcomm from emp t where t.empno = eno; 11 12 income := psal*12+nvl(pcomm,0); 13 14 end empincomep;
调用:
1 2 declare 3 4 income number; 5 6 begin 7 8 empincomep(7369, income); 9 10 dbms_output.put_line(income); 11 12 end;