欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle自定义函数

程序员文章站 2023-03-27 22:47:29
语法如下: create[or replace] function function_name [(argment [ { in | in out }] type, argm...

语法如下:

create[or replace] function function_name

[(argment [ { in | in out }] type,

argment [ { in | out | in out } ] type ]

return return_type //返回数据的类型

{is | as }

//变量的申明,比如:

//strYuan Varchar2(150);

begin function_body //函数体

exception其它语句

end;

 

(1)in参数类型:表示输入给函数的参数,该参数只能用于传值,不能被赋值。

(2)out参数类型:表示参数在函数中被赋值,可以传给函数调用程序,该参数只能用于赋值,不能用于传值。

(3)in out参数类型:表示参数既可以传值,也可以被赋值。

第一种参数传递格式称为位置表示法:

create or replace function cal_salary(demp_name person.department%type) //person.department%type:表示demp_name为person表中的department类型
return number
is
sum_salary number;
begin select sum(salary) into sum_salary from person where department=demp_name; //into:将sum(salary)的值赋值给sum_salary
dbms_output.put_line('计算完成'); //dbms_output.put_line:输出并换行
return sum_salary;
end;

//调用函数
declare
sum_salary number;
begin
sum_salary:=cal_salary('行政部');
dbms_output.put('行政部的薪资为:');
dbms_output.put_line(sum_salary);

end;

//也可以在select语句中调用,如select cal_salary('行政部') from dual;

第二种参数传递格式称为名称表示法,形势参数与实际参数成对出现,相互间关系唯一确定,所以参数的顺序可以任意排列

名称表示法:调用的参数名必须和定义时的参数名相同

create or replace function get_salary(temp_salary person.salary%type)
return number
is
sum_salary number;
begin select sum(salary) into sum_salary from person where person.salary>=temp_salary;
dbms_output.put_line('计算完成');
return sum_salary;
end;

declare
sum_salary number;
temp_salary number;
begin
sum_salary:=get_salary(temp_salary=>4000);//是=>,而不是>=;temp_salary必须与函数定义时所声明的形式参数名称相同
dbms_output.put('行政部的薪资为:');
dbms_output.put_line(sum_salary);
end;

第三种参数传递格式称为混合表示法:同时使用位置表示法和名称表示法为函数传递参数

混合表示法:使用位置表示法所传递的参数必须放在名称表示法所传递的参数前面