正在看的ORACLE教程是:基於Oracle的物件導向技術入門基礎簡析開發人員網路Oracle。
一、概述
對象是Oracle8i以上版本中的一個新的特性,對象實際是對一組資料和操作的封裝,對象的抽象就是類。在物件導向技術中,對象涉及到以下幾個重要的特性:
封裝性
通過對資料和操作的封裝,將使用者關心的資料和操作暴露出來作為介面,其他資料和操作則隱藏到對象內部,這樣便於使用者使用和維護。
繼承性
對象具有繼承性,通過這一特性可以增強程式的可擴充性,適合大型項目的開發。
多態性
同一操作在運行時刻有不同的對象來引用,則其執行結果是不一樣的。這一特性稱之為多態性。
正是因為物件導向的諸多優勢,Oracle公司在8.0版本以後就加入了對這一特性的全面支援,下來的部分重點講述在Oracle中的物件導向程式設計。
二、Oracle中的物件導向程式設計
既然對象具有這麼多的優點,那麼在Oracle資料庫如何引用它呢?Oracle中的對象定義分兩步進行:
首先定義物件類型。定義物件類型跟定義包類型完全一樣,即分為物件類型頭(或稱為對象規範,specification)和物件類型體(body)。物件類型頭包括了物件類型的屬性和方法的聲明,而物件類型體則包含了物件類型具體的實現。
例如,定義一個empObj物件類型,代碼如下:
特別需要注意的是,如果對象沒有成員函數部分,那麼此物件類型的定義只有物件類型頭部分。
然後定義對象執行個體。定義了物件類型後就可以直接定義它的執行個體了,比如定義一個empObj執行個體對象,代碼如下:
經過這兩步之後就可以引用對象執行個體的屬性和方法了,引用符號為“.”,比如
另外,在初始化無成員函數的對象時可以直接以建構函式的形式進行初始化,注意,這個時候不需顯式的定義建構函式。比如,初始化上面v_empObj1對象(假設無成員函數的情況下才能進行這種初始化操作), 代碼如下:
由於Oracle資料庫是關係型資料庫,其儲存資料是以二維表的形式進行的,而對象是對資料和操作進行封裝的一個實體,其儲存資訊往往是多維資訊,那麼對象在Oracle資料庫中的儲存是如何進行的呢?(這裡補充一點,PL/SQL程式塊中聲明的對象是臨時對象,在超出其作用地區後系統將自動收回其分配的資源,但是如果需要儲存對象的資訊,就必須將其儲存在資料庫中)
事實上,對象在Oracle資料庫中的儲存形式分為兩種:
1. 對象列。即可以將資料表中的列的資料類型定義為一個物件類型,這樣對象就可以儲存在資料列中了。比如定義一個表table1,其中emp列可以用來儲存物件。
2. 對象行。即可以建立一個對象表,其中每一列就表示對象中的一個屬性,這樣一條行記錄就是一個對象了。比如定義一個emp表如下:
這樣emp表的一個記錄就是一個empObj對象,插入一個表的操作就可以為:
注意,這裡表中列類型與對象的屬性類型應該一一對應,另外這樣儲存將忽略對象的成員函數的資訊。
[NextPage]
三、對象操作與比較
可以採用DML語句對對象進行操作,其操作的文法跟一般的資料類型完全一樣,比如在table1表中返回對象為empObj(10002,'mike',3000)的記錄:
如果需要進行對象的大小比較,那麼用一般的方法就很難處理,畢竟對象含有一組屬性,無法進行組合比較。可以採用向對象加入map方法和order方法來解決此問題,前者是通過將對象某一屬性返回代表對象的值班來比較大小,後者是通過比較兩個對象之間某個屬性的值班來擷取對象的大小。由於兩者的相似性,這裡以用途更廣的map成員函數為為例示範如下:
這樣定義了map函數後,對empObj對象大小的比較實質轉化為對各個對象的emp_id屬性大小的比較,在實際操作中,應該根據實際情況來返回關心的資料,以進行對象大小比較的操作。
四、小結
通過前面內容的介紹,大家應該對Oracle資料庫的物件導向的特性有一個初步的認識,充分利用Oracle的這一特性,可以將物件導向的重用性,可擴充性等優點引入到資料庫中,提高了資料庫的運行效能。
上一頁