作用和存储过程一致,原则上有一个返回值的时候,用存储函数,否则其他情况都用存储过程
存储过程是create procedures
存储函数是create function(函数),且必须要有返回值,return
无参
- 创建无参存储函数
create or replace function func1
return varchar2
is
begin
return 'hello world!';
end;
create or replace function func11
return varchar2
is
begin
return 'hello world!';
end;
- 执行无参存储函数
begin
dbms_output.put_line(func1);
end;
begin
dbms_output.put_line(func11);
end;
输入参数
– 创建输入参数的存储函数背
- 根据部门编号,返回部门的总工资
create or replace function func2
(v_deptno in number)
return number
is
v_sumsal number;
begin
select sum(sal) into v_sumsal from emp where deptno = v_deptno;
return v_sumsal;
exception
when no_data_found then
dbms_output.put_line('没有此部门');
when others then
dbms_output.put_line('sqlerro');
end;
- 执行输入参数的存储函数
begin
dbms_output.put_line(func2(&no));
end;
begin
dbms_output.put_line(func02(&no));
end;
输出参数
– 创建输出参数的存储函数
- 根据员工的工号输出员工的姓名和工资,并且返回员工的年收入
create or replace function func3
(v_empno in emp.empno%type,v_ename out emp.ename%type ,v_sal out emp.sal%type )
return number
is
v_sumsal number;
begin
select ename,sal,(sal+nvl(comm,0))*12 into v_ename,v_sal,v_sumsal from emp where empno = v_empno;
return v_sumsal;
exception
when no_data_found then
dbms_output.put_line('没有找到部门编号');
when others then
dbms_output.put_line(sqlerrm);
end;
- 执行输出参数的存储函数
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
v_sumsal number;
begin
v_sumsal := func3(&empno,v_ename,v_sal);
dbms_output.put_line(v_sumsal||'====='||v_sal||'===='||v_ename);
end;
输入输出
–创建带有输入输出单数的存储函数
- 求两个数的平方和,并输出两个数的平方
create or replace function func04
(n1 in out number,n2 in out number)
return number
is
begin
n1:=n1*n1;
n2:=n2*n2;
/*调用func04返回的结果*/
return n1+n2;
end;
- 执行输入输出参数的存储函数
declare
n1 number:=&n1;
n2 number:=&n2;
nsum number;
begin
/*给nsum赋值func04*/
nsum:=func04(n1,n2);
dbms_output.put_line(nsum||'===='||n1||'===='||n2);
end;
删除
–删除存储函数
- 语法:drop function + 存储过程名
drop function v_func;

本文介绍了Oracle数据库中的存储函数,强调了其与存储过程的区别,主要使用场景是当有返回值时。内容包括如何创建无参、输入参数、输出参数及输入输出参数的存储函数,并给出了相应的示例操作,同时讲解了删除存储函数的语法。
833

被折叠的 条评论
为什么被折叠?



