创建函数的语法如下:
CREATE [OR REPLACE] FUNCTION function_name
[ (argment [ { IN | OUT | IN OUT } ] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
RETURN return_type
{ IS | AS }
声明部分,<类型.变量的说明>
BEGIN
执行部分,函数体
EXCEPTION
可选的异常错误处理部分
END;
1.创建无参的函数
create or replace function first_func
return varchar2
is
begin
dbms_output.put_line('我是函数');
return 'hello everyone!!!'
end;
调用无参的函数
declare ret varchar2(50);
begin
ret:= first_func;
dbms_output.put_line(ret);
end;
或者
begin
dbms_output.put_line(first_func);
end;
2.创建带输入参数的函数
--根据部门编号返回该部门的总工资
create or replace function second_func
(
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(sqlerrm);
end;
调用带输入参数的函数:
declare v_sumsal number;
begin
v_sumsal := second_func(20);
dbms_output.put_line(v_sumsal);--打印结果
end;
3.创建带输出参数的函数
create or replace function third_func
(
v_empno in emp.empno%type,
v_name out emp.ename%type,
v_sal out emp.sal%type
)
return number --定义返回参数的类型
is
v_salsum number;--定义变量:员工的年收入
begin
select ename,sal,(sal+nvl(comm,0))*12
into v_name,v_sal,v_salsum
from emp
where empno=v_empno;
return v_salsum;--返回参数 员工的年收入
exception
when no_data_found then
dbms_output.put_line('没有此员工!');
when others then
dbms_output.put_line(sqlerrm);
end;
调用带输出参数的函数
declare
v_name varchar2(50);
v_sal number;
v_salsum number;
begin
v_salsum := third_func(7369,v_name,v_sal);
dbms_output.put_line(v_name);
dbms_output.put_line(v_sal);
dbms_output.put_line(v_salsum);
end;
结果为:
SMITH
800
9600
4.创建带有输入输出参数的函数
--求两个数的平方和,并输出两个数的平方
create or replace function four_func
(
n1 in out number,
n2 in out number
)
return number
is
begin
n1 := n1*n1;
n2 := n2*n2;
return n1+n2;
end;
调用带有输入输出参数的函数
declare
n1 number := 1;
n2 number := 2;
nsum number;
begin
nsum := four_func(n1,n2);
dbms_output.put_line(n1);
dbms_output.put_line(n2);
dbms_output.put_line(nsum);
end;
结果为:
1
4
5
删除函数:
drop function 函数名称;