超載
包中的函式和過程可以過載。以下包 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
過載限制
只有本地或打包的子程式或型別方法可以過載。因此,你不能過載獨立的子程式。此外,如果兩個子程式的形式引數僅在名稱或引數模式上不同,則不能過載兩個子程式