超载
包中的函数和过程可以重载。以下包 TEST 有两个名为 print_number 的过程,它们的行为会有所不同,具体取决于调用它们的参数。
create or replace package TEST is
procedure print_number(p_number in integer);
procedure print_number(p_number in varchar2);
end TEST;
/
create or replace package body TEST is
procedure print_number(p_number in integer) is
begin
dbms_output.put_line('Digit: ' || p_number);
end;
procedure print_number(p_number in varchar2) is
begin
dbms_output.put_line('String: ' || p_number);
end;
end TEST;
/
我们称这两个程序。第一个是整数参数,第二个是 varchar2。
set serveroutput on;
-- call the first procedure
exec test.print_number(3);
-- call the second procedure
exec test.print_number('three');
上述脚本的输出是:
SQL>
Digit: 3
PL/SQL procedure successfully completed
String: three
PL/SQL procedure successfully completed
重载限制
只有本地或打包的子程序或类型方法可以重载。因此,你不能重载独立的子程序。此外,如果两个子程序的形式参数仅在名称或参数模式上不同,则不能重载两个子程序