存储函数:
语法与存储过程类似:
create or replace punction 函数名(函数列表)
return 函数值类型
as
begin
PLSQL子程序体;
end 函数名;
示例:
/*
查询某职工的总收入。
*/
create or replace function queryEmpSalary(i_empid in number)
RETURN NUMBER
as
pSal number; --定义变量保存员工的工资
pComm number; --定义变量保存员工的奖金
begin
select sal,comm into pSal, pcomm from emp where empno = i_empid;
return psal*12+ nvl(pcomm,0);
end;
/
调用:
declare
v_sal number;
begin
v_sal:=queryEmpSalary(7934);
dbms_output.put_line('salary is:' || v_sal);
end;
/
begin
dbms_output.put_line('salary is:' || queryEmpSalary(7934));
end;
存储过程和存储函数的区别:
- 一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。
- 但过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。
如何选择存储过程和存储函数?
原则上,如果只有一个返回值,用存储函数,否则,就用存储过程。
但是,一般我们会直接选择使用存储过程,原因是:
- 函数是必须有返回值,存储可以有也可以没有,存储的更灵活!
- 既然存储也可以有输出参数,可以代替存储函数。.
- Oracle的新版本中,已经不推荐使用存储函数了。