- 達(dá)夢(mèng)數(shù)據(jù)庫(kù)編程指南
- 戴劍偉等編著
- 2298字
- 2022-05-06 19:00:25
2.5.8 類類型
DM通過(guò)類類型在DM SQL程序中實(shí)現(xiàn)面向?qū)ο蠓椒ǖ某绦蛟O(shè)計(jì)。類將結(jié)構(gòu)化的數(shù)據(jù)及對(duì)其進(jìn)行操作的過(guò)程或函數(shù)封裝在一起。允許用戶根據(jù)現(xiàn)實(shí)世界的對(duì)象建模,而不必再將其抽象成關(guān)系數(shù)據(jù)。
DM的類的定義分為類頭和類體兩部分,類頭完成類的聲明;類體完成類的實(shí)現(xiàn)。類中可以有以下內(nèi)容。
(1)類型定義。在類中可以定義游標(biāo)、異常、記錄、數(shù)組及內(nèi)存索引表等數(shù)據(jù)類型。在類的聲明中不能聲明游標(biāo)和異常,但是在類的實(shí)現(xiàn)中可以定義和使用。
(2)屬性。類中的成員變量、數(shù)據(jù)類型可以是標(biāo)準(zhǔn)的數(shù)據(jù)類型,也可以是在類中自定義的特殊數(shù)據(jù)類型。
(3)成員方法。類中的函數(shù)或過(guò)程,在類頭中聲明,在類體中實(shí)現(xiàn)。成員方法及構(gòu)造函數(shù)包含一個(gè)隱含參數(shù),即自身對(duì)象,在方法實(shí)現(xiàn)中可以通過(guò)“this”來(lái)訪問(wèn)自身對(duì)象。如果不存在重名問(wèn)題,那么也可以直接使用對(duì)象的屬性和方法。
(4)構(gòu)造函數(shù)。構(gòu)造函數(shù)是類內(nèi)定義及實(shí)現(xiàn)的一種特殊函數(shù),這類函數(shù)用于實(shí)例化類的對(duì)象。構(gòu)造函數(shù)滿足以下條件。
① 函數(shù)名和類名相同。
② 函數(shù)返回值類型為自身類。
構(gòu)造函數(shù)存在以下約束。
① 系統(tǒng)為每個(gè)類提供兩個(gè)默認(rèn)的構(gòu)造函數(shù),分別為無(wú)參構(gòu)造函數(shù)和全參構(gòu)造函數(shù)。
② 無(wú)參構(gòu)造函數(shù)的參數(shù)個(gè)數(shù)為0,實(shí)例對(duì)象內(nèi)所有的屬性初始化值都為NULL。
③ 全參構(gòu)造函數(shù)的參數(shù)個(gè)數(shù)及類型與類內(nèi)屬性的個(gè)數(shù)及屬性相同,按照屬性的順序依次讀取參數(shù)的值并給屬性賦值。
④ 用戶可以自定義構(gòu)造函數(shù),一個(gè)類可以有多個(gè)構(gòu)造函數(shù),但每個(gè)構(gòu)造函數(shù)的參數(shù)個(gè)數(shù)必須不同。
⑤ 如果用戶自定義了0個(gè)參數(shù)或參數(shù)個(gè)數(shù)同屬性個(gè)數(shù)相同的構(gòu)造函數(shù),則會(huì)覆蓋相應(yīng)的默認(rèn)構(gòu)造函數(shù)。
下面從類的聲明、類的實(shí)現(xiàn)、類的刪除、類體刪除和類的使用5個(gè)方面來(lái)詳細(xì)介紹類類型的實(shí)現(xiàn)過(guò)程。
1.類的聲明
類的聲明在類頭中完成。類頭定義通過(guò)CREATE CLASS語(yǔ)句完成,其語(yǔ)法格式如下:

語(yǔ)法說(shuō)明如下。
(1)類中元素可以任意順序出現(xiàn),其中的對(duì)象必須在引用之前進(jìn)行聲明。
(2)過(guò)程和函數(shù)的聲明都是前向聲明,類聲明中不包括任何實(shí)現(xiàn)代碼。有權(quán)限使用該語(yǔ)句的用戶必須是DBA或具有CREATE CLASS數(shù)據(jù)庫(kù)權(quán)限的用戶。
2.類的實(shí)現(xiàn)
類的實(shí)現(xiàn)通過(guò)類體完成。類體的定義通過(guò)CREATE CLASS BODY語(yǔ)句完成,其語(yǔ)法格式如下:

語(yǔ)法說(shuō)明如下。
(1)類聲明中定義的對(duì)象對(duì)于類體而言都是可見(jiàn)的,不需要聲明就可以直接引用。這些對(duì)象包括變量、游標(biāo)、異常和類型定義。
(2)類體中的過(guò)程、函數(shù)定義必須和類聲明中的聲明完全相同,包括過(guò)程名、參數(shù)列表的參數(shù)名和數(shù)據(jù)類型定義。
(3)類中可以有重名的成員方法,要求其參數(shù)列表各不相同。系統(tǒng)會(huì)根據(jù)用戶的調(diào)用情況進(jìn)行重載(Overload)。
(4)權(quán)限。使用該語(yǔ)句的用戶必須是DBA或該類對(duì)象的擁有者,并且具有CREATE CLASS數(shù)據(jù)庫(kù)權(quán)限的用戶。
【例2-21】完整的類頭、類體創(chuàng)建。


3.類的刪除
類的刪除分為兩種方式:一種是類頭的刪除,刪除類頭的同時(shí)會(huì)一并刪除類體;另一種是類體的刪除,這種方式只能刪除類體,類頭依然存在。
刪除類頭:類的刪除通過(guò)DROP CLASS完成,即類頭的刪除。語(yǔ)法格式如下:

語(yǔ)法說(shuō)明如下。
(1)如果被刪除的類不屬于當(dāng)前模式,則必須在語(yǔ)句中指明模式名。
(2)如果一個(gè)類的聲明被刪除,那么對(duì)應(yīng)的類體被自動(dòng)刪除。
(3)權(quán)限說(shuō)明:執(zhí)行該操作的用戶必須是該類的擁有者,或者具有DBA權(quán)限。
4.類體刪除
類體刪除即從數(shù)據(jù)庫(kù)中刪除一個(gè)類的實(shí)現(xiàn)主體對(duì)象。語(yǔ)法格式如下:

語(yǔ)法說(shuō)明如下。
(1)如果被刪除的類不屬于當(dāng)前模式,則必須在語(yǔ)句中指明模式名。
(2)權(quán)限說(shuō)明:執(zhí)行該操作的用戶必須是該類的擁有者,或者具有DBA權(quán)限。
5.類的使用
類類型同普通的數(shù)據(jù)類型一樣,可以作為表列的數(shù)據(jù)類型、程序塊中變量的數(shù)據(jù)類型,以及過(guò)程和函數(shù)參數(shù)的數(shù)據(jù)類型。類的使用規(guī)則如下。
(1)作為表列的類型或其他類成員變量屬性的類型,不能被修改或刪除類中定義的數(shù)據(jù)類型,其名稱只在類的聲明及實(shí)現(xiàn)中有效。如果類內(nèi)函數(shù)的參數(shù)或返回值是類內(nèi)數(shù)據(jù)類型,或者進(jìn)行類內(nèi)成員變量的復(fù)制,則需要在PL/SQL程序塊中定義一個(gè)結(jié)構(gòu)與之相同的類型。根據(jù)類使用方式的不同,對(duì)象可分為變量對(duì)象及列對(duì)象。變量對(duì)象指的是在PL/SQL程序塊中聲明類類型的變量;列對(duì)象指的是表中類類型的列。變量對(duì)象可以修改其屬性的值,而列對(duì)象不能。
(2)變量對(duì)象的實(shí)例化。實(shí)例化通過(guò)NEW表達(dá)式調(diào)用構(gòu)造函數(shù)完成。
(3)變量對(duì)象的引用。通過(guò)“=”進(jìn)行的類類型變量之間的賦值是對(duì)對(duì)象的引用,并沒(méi)有復(fù)制一個(gè)新的對(duì)象。
(4)變量對(duì)象屬性訪問(wèn)。可以通過(guò)<對(duì)象名>.<屬性名>方式進(jìn)行屬性的訪問(wèn)。
(5)變量對(duì)象成員方法調(diào)用。成員方法的調(diào)用通過(guò)<對(duì)象名>.<成員方法名>(<參數(shù)>{,<參數(shù)>})方式進(jìn)行。如果成員方法內(nèi)修改了對(duì)象內(nèi)屬性的值,則該修改生效。
(6)列對(duì)象的插入。列對(duì)象的創(chuàng)建是通過(guò)使用INSERT語(yǔ)句向表中插入數(shù)據(jù)實(shí)現(xiàn)的,插入語(yǔ)句中的值是變量對(duì)象,插入后存儲(chǔ)在表中的數(shù)據(jù)即列對(duì)象。
(7)列對(duì)象的復(fù)制。存儲(chǔ)在表中的對(duì)象不允許對(duì)對(duì)象中的成員變量進(jìn)行修改,通過(guò)INTO語(yǔ)句進(jìn)行的查詢或“=”操作符進(jìn)行的列到變量的賦值是對(duì)象的賦值,生成了一個(gè)與列對(duì)象數(shù)據(jù)一樣的副本,在該副本上進(jìn)行的修改不會(huì)影響表中列對(duì)象的值。
(8)列對(duì)象的屬性訪問(wèn)。通過(guò)<列名>.<屬性名>方式進(jìn)行屬性的訪問(wèn)。
(9)列對(duì)象的方法調(diào)用。通過(guò)<列名>.<成員方法名>(<參數(shù)>{,<參數(shù)>})調(diào)用。
在列對(duì)象方法調(diào)用過(guò)程中對(duì)類型內(nèi)屬性的修改,都是在列對(duì)象的副本上進(jìn)行的,不會(huì)影響列對(duì)象的值。
(10)對(duì)象表的更新。表中存儲(chǔ)的列對(duì)象雖然不能進(jìn)行修改,但是可以通過(guò)UPDATE語(yǔ)句直接更新某行數(shù)據(jù),即并不是修改對(duì)象內(nèi)屬性的值,而是直接替換了對(duì)象。
【例2-22】類類型的變量對(duì)象、列對(duì)象的應(yīng)用。
(1)變量對(duì)象的應(yīng)用實(shí)例如下:

(2)列對(duì)象的應(yīng)用實(shí)例如下:
① 表的創(chuàng)建:

② 列對(duì)象的創(chuàng)建——插入數(shù)據(jù):

③ 列對(duì)象的復(fù)制及訪問(wèn):

- 數(shù)據(jù)產(chǎn)品經(jīng)理高效學(xué)習(xí)手冊(cè):產(chǎn)品設(shè)計(jì)、技術(shù)常識(shí)與機(jī)器學(xué)習(xí)
- Mastering Ninject for Dependency Injection
- 劍破冰山:Oracle開(kāi)發(fā)藝術(shù)
- 企業(yè)大數(shù)據(jù)系統(tǒng)構(gòu)建實(shí)戰(zhàn):技術(shù)、架構(gòu)、實(shí)施與應(yīng)用
- 數(shù)據(jù)要素五論:信息、權(quán)屬、價(jià)值、安全、交易
- Mastering Machine Learning with R(Second Edition)
- MySQL 8.x從入門到精通(視頻教學(xué)版)
- Spark大數(shù)據(jù)分析實(shí)戰(zhàn)
- 金融商業(yè)算法建模:基于Python和SAS
- 數(shù)字IC設(shè)計(jì)入門(微課視頻版)
- 企業(yè)主數(shù)據(jù)管理實(shí)務(wù)
- SIEMENS數(shù)控技術(shù)應(yīng)用工程師:SINUMERIK 840D-810D數(shù)控系統(tǒng)功能應(yīng)用與維修調(diào)整教程
- 利用Python進(jìn)行數(shù)據(jù)分析(原書(shū)第2版)
- 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)精粹
- 一類智能優(yōu)化算法的改進(jìn)及應(yīng)用研究