超载

包中的函数和过程可以重载。以下包 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

重载限制

只有本地或打包的子程序或类型方法可以重载。因此,你不能重载独立的子程序。此外,如果两个子程序的形式参数仅在名称或参数模式上不同,则不能重载两个子程序