Oracle函数的创建,调用和删除

创建函数的语法如下:

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 函数名称;

 

你可能感兴趣的:(oracle)