oracle PL/SQL中的過載
重寫是基於父類子類之間的多型性體現上,父類的一個方法,在子類中可以重寫.
oracle中也可以有過載的實現。自己在總結的時候歸納了一下兩種。
一種是透過包來實現,一種是透過pl/sql塊來實現。相比兩者的實現,包是靜態的,而pl/sql塊是動態的。
可以透過如下的例子來說明一下。
我們現在又一個需求,需要根據輸入的引數得到對應的累計值,輸入的引數從2個到4個不等,需要直接調函式來實現。呼叫的函式名也有一樣。
比如類似下面的樣子。輸入2個引數還是4個引數都是同樣的函式名,這樣就加靈活。
select pack_bonus.get_bonus(1.2,1.4)from dual;
PACK_BONUS.GET_BONUS(1.2,1.4)
-----------------------------
3.36
select pack_bonus.get_bonus(1.3,1,5,1.4) from dual;
PACK_BONUS.GET_BONUS(1.3,1,5,1.4)
---------------------------------
46.04
實現的程式碼如下:
create or replace package pack_bonus as
function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number) return number;
function get_bonus(param1 in number,param2 in number,param3 in number) return number;
function get_bonus(param1 in number,param2 in number)return number;
end;
/
create package body pack_bonus as
function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number)
return number
is
bonus number :=0;
begin
bonus:=2*(param1*param2+param1*param3+param1*param4+param2*param3+param2*param4+param3*param4);
return bonus;
end;
function get_bonus(param1 in number,param2 in number,param3 in number)
return number
is
bonus number :=0;
begin
bonus:=2*(param1*param2+param1*param3+param2*param3);
return bonus;
end;
function get_bonus(param1 in number,param2 in number)
return number
is
bonus number :=0;
begin
bonus:=2*(param1*param2);
return bonus;
end;
end;
/
而Pls/sql的實現,是執行時的,程式碼也是執行時編譯的。
我們可以指定兩個同名的函式,但是引數型別不同,同名的儲存過程,在呼叫的時候根據引數和條件進行呼叫。
declare
function get_message(param1 in varchar2,param2 in number)
return varchar2
is
message varchar2(200);
begin
message :='test '||param1||' '||param2;
dbms_output.put_line('invoke from function 1, '||param1||' '||param2||' '||message);
return message ;
end;
function get_message(param1 in number,param2 in number)
return number
is
message number :=0;
begin
message:=2*(param1*param2);
dbms_output.put_line('invoke from function 2, '||param1||' '||param2||' '||message);
return message;
end;
procedure get_message(param1 in number,param2 in number)
is
message varchar2(100) ;
begin
message :=param1||' '||param2;
dbms_output.put_line('invoke from proc '||param1||' '||param2||' '||message);
end;
begin
if(get_message('a',10)='test a 10') then
dbms_output.put_line('-----invoke from function 1---');
end if;
if(get_message(10,10)>0) then
dbms_output.put_line('---invoke from function 2---');
end if;
get_message(10,10);
dbms_output.put_line('---invoke from proc ---');
end;
/
呼叫後的結果,可以看到在輸入引數是字串和數字的時候會根據不同的條件來選擇呼叫哪個函式,儲存過程。
invoke from function 1, a 10 test a 10
-----invoke from function 1---
invoke from function 2, 10 10 200
---invoke from function 2---
invoke from proc 10 10 10 10
---invoke from proc ---
當然了總結的比較匆忙,還是有一些理解不深入和準備不充分的地方。諒解諒解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1346991/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle PL/SQL中EXCEPTION用法OracleSQLException
- Oracle Pl/SQL 之 儲存過程OracleSQL儲存過程
- Oracle PL/SQL程式碼中的註釋OracleSQL
- Oracle PL/SQLOracleSQL
- oracle中取得儲存過程、函式等pl sql原始碼的方法Oracle儲存過程函式SQL原始碼
- PL/SQL 中的儲存過程與函式SQL儲存過程函式
- Oracle PL/SQL INDICESOracleSQL
- oracle PL/SQL示例OracleSQL
- Oracle PL/SQL編寫PL/SQL程式碼的注意事項OracleSQL
- Oracle 12c中增強的PL/SQL功能OracleSQL
- pl/sql中的row物件SQL物件
- Oracle 的PL/SQL語言使用OracleSQL
- oracle pl/sql programmingOracleSQL
- PLSQL Language Reference-PL/SQL子程式-過載子程式SQL
- PLSQL Language Reference-PL/SQL子程式-過載子程式-不可以過載的子程式SQL
- PLSQL Language Reference-PL/SQL子程式-過載子程式-子程式過載錯誤SQL
- PL/SQL中動態掉用儲存過程SQL儲存過程
- pl/sql中的引數模式SQL模式
- pl/sql中bulk collect的用法SQL
- ORACLE之常用FAQ:SQL&PL/SQLOracleSQL
- 【OracleEBS】 在PL/SQL中呼叫Oracle ERP請求OracleSQL
- Oracle PL/SQL塊簡介OracleSQL
- Oracle PL/SQL 之 函式OracleSQL函式
- PL/SQL Developer 連線 OracleSQLDeveloperOracle
- oracle INDEX BY Pl/sql陣列OracleIndexSQL陣列
- 【PL/SQL】oracle建立dblinkSQLOracle
- Oracle PL/SQL之GROUP BY CUBEOracleSQL
- Oracle PL/SQL迴圈示例OracleSQL
- 通過pl/sql來格式化sqlSQL
- 【Oracle】--PL/SQL匯入Oracle sql指令碼"傻瓜教程"OracleSQL指令碼
- Oracle 11g中的Native PL/SQL程式碼編譯OracleSQL編譯
- 在Oracle 9ias中的pl/sql包的訪問控制(轉)OracleSQL
- Oracle PL/SQL 自治事務的說明OracleSQL
- 【PL/SQL】Oracle--樹的使用(Connect By)SQLOracle
- Oracle PL/SQL之 Package介紹OracleSQLPackage
- Oracle PL/SQL語言基礎OracleSQL
- 【Oracle】Windows安裝pl/sql developerOracleWindowsSQLDeveloper
- oracle dbms_profiles分析pl/sqlOracleSQL