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/SQLOracleSQL
- Oracle PL/SQL程式碼中的註釋OracleSQL
- Oracle 的PL/SQL語言使用OracleSQL
- Oracle PL/SQL塊簡介OracleSQL
- 【OracleEBS】 在PL/SQL中呼叫Oracle ERP請求OracleSQL
- 使用profiler測試Oracle PL/SQL效能OracleSQL
- PL/SQL中動態掉用儲存過程SQL儲存過程
- [20240607]PL/SQL中sql語句的註解.txtSQL
- 【TUNE_ORACLE】列出LOOP套LOOP的PL/SQL程式碼SQL參考OracleOOPSQL
- PL/SQL Developer連線到Oracle 12cSQLDeveloperOracle
- 「Oracle」客戶端 PL/SQL DEVELOPER 安裝使用Oracle客戶端SQLDeveloper
- Oracle vs PostgreSQL Develop(23) - PL(pg)sql(引數宣告)OracleSQLdev
- 原創:oracle PL/SQL程式設計基礎 上OracleSQL程式設計
- 原創:oracle PL/SQL程式設計基礎 下OracleSQL程式設計
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- PL/SQL 宣告SQL
- ORACLE PL/SQL 物件、表資料對比功能儲存過程簡單實現OracleSQL物件儲存過程
- 5. Oracle連線和使用——5.2. PL/SQL DeveloperOracleSQLDeveloper
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- pl/sql to_dateSQL
- PL/SQL 運算子SQL
- PL/SQL 條件SQL
- PL/SQL 迴圈SQL
- PL/SQL 遊標SQL
- PL/SQL Developer下載地址和漢化包地址SQLDeveloper
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- Oracle 19c Concepts(08):Server-Side Programming: PL/SQL and JavaOracleServerIDESQLJava
- 本地不安裝oracle,用PL/SQL Developer連線資料庫OracleSQLDeveloper資料庫
- Oracle中的sql hintOracleSQL
- 使用PL/SQL找到兩個表中的相似值FKSQL
- 如何在PL/SQL中讀寫檔案(轉)SQL
- oracle學習筆記(十五) PL/SQL語法結構以及使用Oracle筆記SQL
- ultraedit高亮顯示pl/sqlSQL
- pl/sql developer的一個小問題SQLDeveloper
- APEX 通過PL/SQL動態展示區域中動態內容SQL
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- PL/SQL 條件控制語句SQL
- PL/SQL程式設計急速上手SQL程式設計
- PL/Plus本地連線oracle配置Oracle