超載

包中的函式和過程可以過載。以下包 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

過載限制

只有本地或打包的子程式或型別方法可以過載。因此,你不能過載獨立的子程式。此外,如果兩個子程式的形式引數僅在名稱或引數模式上不同,則不能過載兩個子程式