Oracle存储函数
- -
存储过程和存储函数的区别
一般来讲,过程和函数的区别在于函数可以有一个返回值;
而过程没有返回值。
但过程和函数都可以通过 out 指定一个或多个输出参数。
我们可以利用 out 参数,在过程和函数中实现返回多个值。
create or replace function 函数名称 (参数1 in |out 参数类型,参数2 in |out 参数类型)
return 数据类型
is |as
begin
return (结果变量);
end [函数名];
create or replace function fun_001
return varchar2
as
begin
return '创建一个存储函数' ;
end ;
调用函数
select fun_001 from dual;
--方式二: 在PLSQL 块中调用存储函数
declare
--声明一个变量用于接收存储函数的返回值
p_temp varchar2(50);
begin
--将存储函数的返回值赋给变量
p_temp := fun_001;
dbms_output.put_line(p_temp);
end;
create or replace function fun_emp_year_sal(eno in number )
return number
as
--接收年薪
yearsal number ;
begin
select round((sal *12 )+nvl(comm,0 ),2 ) into yearsal from emp where empno = eno;
return yearsal;
end ;
declare
ysal number;
begin
ysal := fun_emp_year_sal(7369 );
dbms_output.put_line('年薪是:'||ysal);
end ;
create or replace procedure pro_emp_year_sal(eno number ,totalsal out number )
as
begin
-- 查询年薪
select round((sal *12 )+nvl(comm,0 ),2 ) into totalsal from emp where empno = eno;
end ;
declare
dd number;
begin
pro_emp_year_sal(7369 ,dd);
dbms_output.put_line('存储过程查询年薪:'||dd);
end ;
删除函数
drop functioin 函数名;
存储过程和存储函数的区别
--1 )返回值:存储过程是没有返回值;存储函数是有返回值;
--2 )使用方式:存储函数一般在SQL 语句中使用;存储函数可以写在select语句中,存储过程不行
--而存储过程一般单独使用;
--3 )用途:存储函数实现计算并返回计算的结果;而存储过程一般用来实现一些特定的功能;
create or replace function fun_find_dname_by_dno(dno number )
return varchar2
as
ddname varchar2(200 );
begin
select dname into ddname from dept where deptno = dno;
return ddname;
end ;
select e.* ,fun_find_dname_by_dno(e.deptno) 部门名称,fun_emp_year_sal(e.empno) 年薪
from emp e;