2016-05-22 65 views
0

請幫我回答下面的面試問題..重載甲骨文

問:爲什麼不能獨立的子程序中的Oracle。只有包子程序超載/本地子程序可以在Oracle超載。

問候 Srikanta Parida

回答

1

因爲存儲過程/函數名稱是唯一的。 請參閱Oracle文檔:

命名過程和函數

因爲一個過程或函數存儲在數據庫中,它必須是 命名。這與其他存儲過程有所區別,並使應用程序可以調用它 。模式中的每個公開可視程序 或函數都必須具有唯一的名稱,並且名稱必須是 合法的PL/SQL標識符。

0

一個簡短的答案是 - 因爲文檔中說,獨立的子程序不能被重載:
https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/subprograms.htm#i12352

限制超載

只有本地或打包的子程序,或類型的方法,可以重載 。您不能超載獨立子程序。


爲什麼?你需要問Oracle爲什麼以這種方式實現它

我的猜測是,每個獨立的子程序被視爲一個數據庫對象(你可以在ALL_OBJECT或USER_OBJECT視圖中找到它們,它們的類型是:PROCEDURE和FUNCTION),每個數據庫對象必須具有唯一的名稱,因此您不能創建兩個具有相同名稱的函數或過程。

1

獨立過程/函數是一個模式對象,它由類型和名稱的組合來標識。

你可能會認爲這是一個任意的設計決定。然而,與數據字典中的簡單對象標識符相比,重載函數和過程的好處很小,特別是在整個地方沒有空分量。

因爲sw工程最佳實踐(如關注點分離,數據封裝,可維護性)等原因,需要重載例程的應用程序無論如何都應該利用程序包範例。

注意: 模式類型提供了另一個選項來定義重載的方法。