Oracle自定义函数

语法如下:

         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;


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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值