1、重载的概念
指在一个程序包中,多个程序单元使用相同的名称。但要注意:重载子程序必须同名不同参。即名称相同,参数不同,参数不同体现在参数的数量、参数顺序、参数类型是不同的。
仅参数名和参数模式不同,不可以重载;
例:procedure select_score(s1 IN char);
procedure select_score(p1 OUT char);
仅返回的数据类型不同,不可以重载
FUNCTION five_score(sc number) RETURN varchar2;
FUNCTION five_score(sc number) RETURN number;
重载子程序参数必须在类型系列方面有所不同。
procedure select_score(s1 IN char);
procedure select_score(p1 IN number);
2、示例
在程序包中创建3个ADD函数,分别用于实现两数之和、连接两个字符串、在某日期上加上N天。
CREATE OR REPLACE PACKAGE overloading IS
FUNCTION add(num1 in number,num2 in number)
RETURN number;
FUNCTION add(str1 in varchar2,str2 in varchar2)
RETURN varchar2;
FUNCTION add(date1 in date,n in number)
RETURN date;
END;
CREATE OR REPLACE PACKAGE BODY overloading
IS
--求两数之和
FUNCTION add(num1 in number,num2 in number)
RETURN number IS
result number;
BEGIN
result:=num1+num2;
return result;
END;
--求两个字符串连接值
FUNCTION add(str1 in varchar2,str2 in varchar2)
RETURN varchar2
IS
result varchar2(200);
BEGIN
result:=str1 || str2;
RETURN result;
END;
--求某日期N天后的日期值
FUNCTION add(date1 in date,n in number)
RETURN date
IS
result date;
BEGIN
result:=date1+n;
RETURN result;
END;
END overloading;
--对重载函数的调用
DECLARE
v_date date;
v_number number;
v_str varchar2(200);
BEGIN
v_date:=overloading.add(sysdate,5);
v_number:=overloading.add(157,654);
v_str:=overloading.add('THIS IS ',‘ OVERLOADING');
dbms_output.put_line('5天后是:'||v_date);
dbms_output.put_line('两数相加值是:' || v_number);
dbms_output.put_line('两字符串连接值是:' || v_str);
END;