PLSQL Language Reference-PL/SQL子程式-過載子程式-只是數值資料型別不同的形參

LuiseDalian發表於2014-03-30

只是數值資料型別不同的形參

如果形參只是在數值資料型別上不同,也是可以過載的。這個技術用於寫數學應用程式的介面,因為多個函式的版本可以使用相同的名稱,每個可以接受不同的數值型別。

為了避免給這樣的子程式傳遞引數時造成不必要的麻煩:

n  確保對於每個期待的引數的集合,希望的版本的子程式被呼叫。例,有過載的子程式可以接受binary_floatbinary_double,如果你傳遞的是VARCHAR2型別的引數,’0.5’,則會呼叫哪個函式呢?

n  修飾數字字面量並使用轉換函式來明確希望的引數型別。例5.0f表示為binary_float 5.0dbinary_double,或使用轉換函式to_binary_float, to_binary_double, to_number

                                                                                                                              

PL/SQL以下面的順序來匹配數值引數:

PLS_INTEGERNUMBERBINARY_FLOATBINARY_DOUBLE

一個VARCHAR2的值,可以匹配NUMBERBINARY_FLOATBINARY_DOUBLE

PL/SQL使用每一個匹配提供引數的子程式。例,SORT函式只有一個引數。它有多個過載可以接受NUMBERBINARY_FLOATBINARY_DOUBLE。如果傳遞了一個PLS_INTEGER,則第一個匹配的過載函式為接受NUMBER引數的SORT函式。

 

如果PL/SQL試圖將一個引數轉換為其它型別,它會試圖將它轉換成更高的資料型別。例,

ATAN2函式接受2個相同型別的引數,如果傳遞的引數是不同型別,例如一個為PLS_INTEGER,另一個為BINARY_FLOAT,則PL/SQL試圖找到一個匹配,它的2個引數都使用高的資料型別。本例中是2個引數均為BINARY_FLOATATAN2函式,因為PLS_INTEGER被轉換為更高的型別BINARY__FLOAT

 

一個函式接受2個不同型別的引數,一個過載版本接受PLS_INTEGERBINARY__FLOAT引數;另一個過載版本接收NUMBERBINARY_DOUBLE引數,如果呼叫時傳遞了2NUMBER引數,則PL/SQL會匹配到(PLS_INTEGER, BINARY_FLOAT)。因為BINARY_FLOATBINARY_DOUBLE更匹配NUMBER,而後PL/SQL向下看將NUMBER轉換成都PLS_INTEGER

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1132823/,如需轉載,請註明出處,否則將追究法律責任。

相關文章