前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle PL/SQL中的重载 (r3笔记27天)

oracle PL/SQL中的重载 (r3笔记27天)

作者头像
jeanron100
发布2018-03-14 17:45:53
8150
发布2018-03-14 17:45:53
举报

在java中,有方法重写,方法重载,重载的一个典型例子就是类中的构造函数,可以根据自己的需求定义多个构造函数,默认是一个无参数的空函数。 重写是基于父类子类之间的多态性体现上,父类的一个方法,在子类中可以重写. oracle中也可以有重载的实现。自己在总结的时候归纳了一下两种。 一种是通过包来实现,一种是通过pl/sql块来实现。相比两者的实现,包是静态的,而pl/sql块是动态的。 可以通过如下的例子来说明一下。 我们现在又一个需求,需要根据输入的参数得到对应的累计值,输入的参数从2个到4个不等,需要直接调函数来实现。调用的函数名也有一样。 比如类似下面的样子。输入2个参数还是4个参数都是同样的函数名,这样就加灵活。

select pack_bonus.get_bonus(1.2,1.4)from dual;

PACK_BONUS.GET_BONUS(1.2,1.4) ----------------------------- 3.36

select pack_bonus.get_bonus(1.3,1,5,1.4) from dual;

PACK_BONUS.GET_BONUS(1.3,1,5,1.4) --------------------------------- 46.04 实现的代码如下:

create or replace package pack_bonus as function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number) return number; function get_bonus(param1 in number,param2 in number,param3 in number) return number; function get_bonus(param1 in number,param2 in number)return number; end; /

create package body pack_bonus as function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number) return number is bonus number :=0; begin bonus:=2*(param1*param2+param1*param3+param1*param4+param2*param3+param2*param4+param3*param4); return bonus; end;

function get_bonus(param1 in number,param2 in number,param3 in number) return number is bonus number :=0; begin bonus:=2*(param1*param2+param1*param3+param2*param3); return bonus; end;

function get_bonus(param1 in number,param2 in number) return number is bonus number :=0; begin bonus:=2*(param1*param2); return bonus; end; end; / 而Pls/sql的实现,是运行时的,代码也是运行时编译的。 我们可以指定两个同名的函数,但是参数类型不同,同名的存储过程,在调用的时候根据参数和条件进行调用。

declare function get_message(param1 in varchar2,param2 in number) return varchar2 is message varchar2(200); begin message :='test '||param1||' '||param2; dbms_output.put_line('invoke from function 1, '||param1||' '||param2||' '||message); return message ; end;

function get_message(param1 in number,param2 in number) return number is message number :=0; begin message:=2*(param1*param2); dbms_output.put_line('invoke from function 2, '||param1||' '||param2||' '||message); return message; end;

procedure get_message(param1 in number,param2 in number) is message varchar2(100) ; begin message :=param1||' '||param2; dbms_output.put_line('invoke from proc '||param1||' '||param2||' '||message); end;

begin if(get_message('a',10)='test a 10') then dbms_output.put_line('-----invoke from function 1---'); end if; if(get_message(10,10)>0) then dbms_output.put_line('---invoke from function 2---'); end if; get_message(10,10); dbms_output.put_line('---invoke from proc ---');

end; / 调用后的结果,可以看到在输入参数是字符串和数字的时候会根据不同的条件来选择调用哪个函数,存储过程。 invoke from function 1, a 10 test a 10 -----invoke from function 1--- invoke from function 2, 10 10 200 ---invoke from function 2--- invoke from proc 10 10 10 10 ---invoke from proc --- 当然了总结的比较匆忙,还是有一些理解不深入和准备不充分的地方。谅解谅解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档