Oracle8 對象關系數據庫_第1頁
Oracle8 對象關系數據庫_第2頁
Oracle8 對象關系數據庫_第3頁
Oracle8 對象關系數據庫_第4頁
Oracle8 對象關系數據庫_第5頁
已閱讀5頁,還剩132頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Oracle8 對象關系數據庫高端數據據庫-提提高DBMS管理上限限Oracle8對象關系系數據庫庫擴充的類類型系統(tǒng)統(tǒng)對象關系系數據庫庫Oracle8數據庫系系統(tǒng)一、高端端數據庫庫-提高高DBMS管理上限限oracle7oracle8數據庫大大小32TB512KTB數據文件件個數1-4K64-256M每表包含含列數數2541000每表的LOB列數1long1000CHAR長度2542000VARCHAR長度20004000索引列數數1632支持上萬萬個并發(fā)發(fā)用戶多線程服服務器(用少量量的服務務器端進進程管理理大量的的客戶端端用戶。Net8(SQL*net)連接管理理器連連接池(TNS資源)、多

2、路傳傳輸、應應用請求求集中化化更有效地地使用網網絡資源源避免操作作系統(tǒng)對對服務器器網絡連連接數的的限制客戶端(服務器器)服服務務器一、高端端數據庫庫-提高高DBMS管理上限限網絡層透明網絡絡底層協(xié)議適配配器二、擴充充的類型型系統(tǒng)-對象關系系數據庫庫關系模型型與對象象模型新的數據據類型-對象(記錄)類型對象表面向對對象數據據庫設計計收集類型型(數組組與嵌套套表)對象與視視圖數據庫新新的應用用領域計算機輔輔助設計計CAD數據庫必必須存儲儲和處理理與工程程設計相相關的數數據(產產品部件件及相互互關系、設計版版本)計算機輔輔助軟件件工程數據庫中中存儲軟軟件開發(fā)發(fā)人員用用到的各各種數據據,包括括源代碼碼

3、、模塊塊之間依依賴關系系、變量量定義、文檔多媒體數數據庫聲音、視視頻、圖圖象辦公信息息系統(tǒng)超文本數數據庫應用需要要新的數數據類型型論論文文檢索系系統(tǒng)論文標題題作者列表表(第一一作者,第二作作者,找找出某人人參與撰撰寫的所所有論文文)檢索關鍵鍵字發(fā)表日期期(年月月日分開開)傳統(tǒng)關系系數據庫庫的數據據類型復雜屬性性只能拆拆分成并并列的單單一屬性性姓名,地地址(省省、市、區(qū)、街街道、門門牌號)本來是一一個結合合緊密的的整體,在關系系數據庫庫中卻只只能拆成成單一屬屬性,與與其他屬屬性并列列(如姓姓名、年年齡等),沒有有反映出出它們的的緊密關關系。無法表示示變長的的屬性家庭記錄錄有幾個個孩子長字段設幾個

4、字字段(不不好估計計)家庭編號號戶主子女1子女2子女3傳統(tǒng)關系系數據庫庫的數據據類型無法直接接表示嵌嵌套表例:一張張發(fā)貨單單,發(fā)三三種貨物物:放3條記記錄,但但公共信信息存3遍(查查詢方便便)拆成兩張張表(發(fā)發(fā)貨單,發(fā)送貨貨物),需要連連接,費費時,且且要清楚楚表與表表的關系系貨單號發(fā)貨人貨物日期發(fā)往地貨物名稱稱價格數量關系數據據庫的數數據模型型數據模型型是模型型化數據據和信息息的工具具?,F實世界界認識抽象信息世界界概念念數據模模型機器世界界DBMS支持的數數據模型關系模型型轉換數據模型型演變文件系統(tǒng)統(tǒng)(OS)層次模型型網網狀模型型關關系模型型(DB)特點:面向記錄錄,信息息由定長長記錄組組成

5、。記錄簡單單(短小小)。原子字段段,字段段不再含含有結構構。關系模型型的特點點強調數據據的獨立立性(以以數據為為中心),數據據與程序序分離。采用關系系模型、概念單單一,實實體和聯(lián)聯(lián)系都是是用關系系來表示示。關系必須須是規(guī)范范化的關關系,要要求每一一分量不不可再分分。支持關系系語言,具有高高度非過過程化,支持集集合運算算通過外來來碼實現現表的連連接(多多表查詢詢)Oracle8擴擴充的類類型系統(tǒng)統(tǒng)是對關系系數據模模型進行行的擴充充。提供更為為豐富的的面向對對象的類類型系統(tǒng)統(tǒng)。擴充的類類型系統(tǒng)統(tǒng)允許元元組的屬屬性值為為復雜類類型,在在關系查查詢語言言中增加加處理新新數據類類型的成成分。既保留關關系

6、模型型基礎又提高建建模能力力對象關系系模型為為希望使使用面向向對象特特征的關關系數據據庫用戶戶提供可可能。面向對象象的基本本概念面向對象象方法是是以要解解決的問問題中所所涉及到到的各種種對象為為主要考考慮因素素。對象是一一種看問問題的觀觀點,是是對現實實世界各各種元素素的一種種抽象。對象既既含數據據又含功功能,因因此具有有自身處處理數據據的能力力。對象象被認為為是迄今今為止最最接近真真實事物物的數據據抽象?,F實世界界中對象象有兩個個共同的的特點:一方面,它們都都有自己己的狀態(tài)態(tài)。如一一臺電視視機有自自己的擺擺放位置置,有關關機和開開機狀態(tài)態(tài),此刻刻正在播播放某一一頻道的的電視節(jié)節(jié)目等另一方面面

7、,它們們又都有有自己的的行為,如電視視機的開開機、關關機、調調臺等。面向對象象的基本本概念內部實現現(封裝)接口屬性、方方法能動的主主體使電腦貼貼近人腦腦的思維維模式(減少人人認識問問題時的的認識空空間和計計算機處處理問題題時的方方法空間間的不一一致性)。實現軟件件的復用用(軟件件芯片)。對象的屬屬性與方方法面向對象象程序設設計中的的對象是是現實世世界對象象的模型型化,它它同樣具具有狀態(tài)態(tài)和行為為。對象的狀狀態(tài)用屬屬性來維維護,對象的行行為用方方法來實實現。因此可以以簡單地地講,對對象是面面向對象象的程序序設計模模式,它它由描述述對象狀狀態(tài)的屬屬性(變變量)和和用來實實現對象象行為的的方法(代

8、碼)組成。對象與類類相關對象象的集合合稱為類類(Class)類是對象象的抽象象及描述述,它是是具有統(tǒng)統(tǒng)一屬性性和方法法的多個個對象的的統(tǒng)一描描述體,是用來來定義一一組對象象共有屬屬性和方方法的模模板。類是用來來創(chuàng)建對對象實例例的樣板板,它包包含所創(chuàng)創(chuàng)建對象象的狀態(tài)態(tài)描述和和方法的的定義。類是一一個型,而對象象則是這這個型的的一個實實例。類是靜態(tài)態(tài)概念,而對象象則是一一個動態(tài)態(tài)概念,因為只只有在運運行時才才給對象象分配空空間,對對象才真真正存在在。面向對象象的數據據模型在一些應應用中,用戶將將數據庫庫中的數數據看作作是一組組對象而而非一組組記錄。面向對象象的數據據模型是是面向對對象程序序設計思思

9、想在數數據庫系系統(tǒng)中的的應用?;舅枷胂雽禂祿筒俨僮鬟@些些數據的的程序代代碼封裝裝在一個個對象里里。將一個對對象存儲儲在數據據庫中:對象的數數據部分分必須針針對各個個對象分分別存儲儲。而實現類類方法的的程序代代碼應該該和類的的定義一一起作為為數據庫庫模式的的一部分分存儲。面向對象象數據庫庫數據庫中中不是只只存儲單單純的數數據,而而是存儲儲包含屬屬性和方方法的對對象。對于一個個數據庫庫對象,可定義義在其上上運行的的過程和和函數。使數據據庫中的的數據和和訪問該該數據的的方法聯(lián)聯(lián)系起來來,可標標準化數數據訪問問的方法法并提高高對象的的可復用用性。應用邏輯輯從應用用程序中中移動到到數據庫庫中(對對

10、象方法法)創(chuàng)建通用用的數據據庫對象象,并能能成為數數據庫對對象的標標準,可可實現數數據庫對對象的重重用。數據模型型現實世界界認識抽象信息世界界概念念數據模模型機器世界界DBMS支持的數數據模型對象模型型轉換對象模型型與關系系模型對象模型型對象類型型的屬性性描述對象類型型的方法法封裝了了操作該該對象的的代碼。提供了了處理數數據庫中中數據的的界面。關系模型型二維表中中列的定定義沒有方法法另編程可使用操操作某數數據庫表表的存儲儲過程。面向對象象數據模模型中的的類概念念實體體集概念念。面向對象象數據模模型中的的對象概概念實實體概念念對象模型型與關系系模型關系模型型可用二二維表來來表示關關系表表:屬性二

11、二維表的的列元組二二維表的的行對象模型型可用二二維表來來表示對對象表表:用一個類類(對對象類型型)定義義一個對對象表類的屬性性 二二維表表的列對象(類類的實例例)二二維表表的行(行對象象)通過對象象調用對對象方法法。Oracle的的擴充類類型Oracle是一個開開放的類類型系統(tǒng)統(tǒng),增加加了復雜雜的數據據類型以以及用戶戶自定義義類型用戶定義義的數據據類型使使得可以以在數據據庫中為為現實世世界的對對象建模模對象類型型(記錄錄類型)數組類型型嵌套表類類型創(chuàng)建對象象表,實實現面向向對象的的數據庫庫設計(而非關關系型數數據庫設設計。應用邏輯輯從應用用程序中中移動到到數據庫庫中(對對象方法法)擴充類型型的

12、不同同應用對象類型型數數組類型型嵌嵌套表類類型關系表對對象表對象類型利用對象象類型定定義復復合數據據類型用戶自定定義數據據類型使用對象象類型定定義一個個記錄數數據類型型CREATETYPEname_typeASOBJECT(first_nameVARCHAR2(4),last_nameVARCHAR2(4);CREATETYPEaddress_typeASOBJECT(cityVARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6);CREATETABLEworker(widNUMBER(5)PRIMARYKEY,wnamename_type ,addressa

13、ddress_type);對象類型型數據的的操作使用對象類型型聲明了關系表中的列,DML語句必須須用一些些特殊的的語法插入新記記錄時,對于對對象類型型的列,要使用用構造函函數構造造出對應應類型的的數據。構造函數數是對象象類型的的特殊方方法,利利用此方方法為該該類型創(chuàng)創(chuàng)建對象象。構造造方法的的名稱與與對象類類型(類類)同名名。對記錄型型數據的的分量進進行操作作時,要要使用“別名”對象類型型數據的的操作插入語句句例:insertintoworkervalues(1,name_type(王,至遠),address_type(北京,白頤頤路5號號,100084);insertintoworkerval

14、ues(2,name_type(張,大年),address_type(天津,康寧寧里20號,300072);insertintoworkervalues(3,name_type(趙,力平),address_type(上海,南京京路23號,200092);對象類型型數據的的查詢查詢語句句1select*from worker;WIDNAME(FIRST_NAME, LAST_NAME)ADDRESS(CITY,STREET,ZIP)-1NAME_TYPE(王,至遠遠)ADDRESS_TYPE(北京, 白白頤路5號, 100084)2NAME_TYPE(張,大年年)ADDRESS_TYPE(天津,

15、 康康寧里20號,300072)3NAME_TYPE(趙,力平平)ADDRESS_TYPE(上海, 南南京路23號,200092)查詢語句句2selectwid,wname fromworker;WIDNAME(FIRST_NAME,LAST_NAME)-1NAME_TYPE(王,至遠遠)2NAME_TYPE(張,大年年)3NAME_TYPE(趙,力平平)對象類型型數據的的查詢查詢語句句3(用別別名)selectwid顧客編號號,w.address.city城市,w.address.street街道,w.address.zip郵編from workerw;顧客編號號城城市市街街道道郵郵編編-1

16、北北京白白頤路5號1000842天天津康康寧里20號3000723上上海南南京路23號200092查詢語句句4(別名名的使用用)select*from workerworder byw.address.zip對象類型型數據的的操作修改updateworkerwsetw.address.zip=100083wherewid=1;刪除deletefromworkerwherewid=1;.first_name=王;修改表結結構altertablecustadd(address1 address_type);不能對表表修改自定義的的數據類類型格

17、式式用戶自定定義數據據類型對象類型型更加貼貼近現實實世界的的數據特特征。使用對象象類型可可以更加加統(tǒng)一、自然地地聲明和和操作表表中的數數據(在整個數數據庫中中地址一一致性)創(chuàng)建可為為大家引引用的新新數據類類型:創(chuàng)建一個個模式(如pub)建立公共共對象類類型(新新數據類類型)設置必要要的權限限使用CREATEPROCEDURE new_worker(widNUMBER,_type,addresspub.address_type)自定義數數據類型型上的索索引createindexaaa on worker(wname);ORA-02327:無法在具具有數據據類型ADT的列上

18、創(chuàng)創(chuàng)建索引引。(即使在在name_type類中定義義了排序序方法也也不可以以)如經常進進行如下下查詢:selectwid顧客編號號,w.address.city城市,w.address.street街道,w.address.zip郵編from workerwwherew.address.zip=100084;可建索引引如下:createindexI_ziponworker(address.zip);使用對象象表面向對對象數據據庫設計計建立對象象表的類類建類型(對象類類型聲明明)createtype類型名asobject(屬性名1類類型說明明,屬性名2類類型說明明,.memberfunction

19、函數名(參數數說明)return返回類型型,memberprocedure過程名(參數說說明),) ;方法說明明屬性說明明對象屬性性類型對象類型型必須包包含一個個或多個個屬性,屬性的的類型可可以是:Oracle的原始數數據類型型、LOB對象對象的引引用(REF)收集(COLLECTION)等對象方法法方法是一一個過程程或函數數,是是對象類類型定義義的一部部分,是是程序員員編寫的的用于操操縱對象象屬性的的子程序序,被封封裝在對對象類型型中。方法的種種類:成員方法法 (member)構造方法法 (constructor)MAP或ORDER方法(排排序方法法)一個類可可以有多多個方法法(也可可以不定

20、定義方法法)對象類型型不存儲儲數據;必須創(chuàng)創(chuàng)建相應應的表來來存儲數數據編寫方法法代碼建類型體體(實現現類成員員方法)createtypebody類型名ASmemberfunction函數方法法名(參數說說明)return返回類型型is 說明部分分begin執(zhí)行部分分end;memberprocedure過程方法法名(參參數說明明)is說明部分分begin執(zhí)行部分分end;END;方法實現現方法實現現建立對象象表建對象表表Createtable表名of對象類型型();例:CREATETYPEemployee_typeASOBJECT(.);CREATETABLEemployeesOFemploy

21、ee_type(empnoconstrainte1primarykey );CREATETYPEBODYemployee_type();表定義的的其他說說明,如如完整性性約束等等,表的的列不能能再定義義建立對象象類型例例CREATETYPEemployee_typeASOBJECT(empnoNUMBER(3),enameVARCHAR2(10),salNUMBER(6.2),hiredateDATE ,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER);/創(chuàng)建對象

22、象表CREATETABLEemployees OF employee_type(PRIMARY KEY(empno),UNIQUE(ename),CHECK(sal300);建立對象象類型體體CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+

23、increment_salWHEREempno= SELF.empno;END;END;對方法的的限制編譯軟件件包中的的函數或或過程時時,可可以使用用PRAGMA編譯指令令通知PL/SQL編譯器禁禁止某方方法對數數據庫表表和包中中的變量量讀寫, 當方方法體中中出現違違反情況況時,編編譯出出錯。格式:PRAGMARESTRICT_REFERENCES(function_name,WNDS , WNPS , RNDS , RNPS );WNDS不允許寫寫數據庫庫RNDS不允許讀讀數據庫庫WNPS不允許改改程序包包變量RNPS不允許引引用程序序包變量量對方法的的限制CREATEOR REPLACET

24、YPEemployee_typeASOBJECT(empnoNUMBER,enameVARCHAR2(10),salNUMBER,hiredateDATE ,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER) ,PRAGMARESTRICT_REFERENCES(days_at_company,WNDS ,WNPS);對方法的的限制CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_compan

25、yRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);UPDATEemployees SEThiredate=hiredate+30;-END;.END;- -0/0PL/SQL:Compilationunit analysis terminated2/10PLS-00452:子程序DAYS_AT_COMPANY違反了它它的相關關編譯指指令對象類型型-構構造子方方法Oracle自動地為為每個對對象類型型創(chuàng)建一一個構造造方法。構造子方方法的名名稱采用用對象類類型名。構造子方方法的參參數即對對象類型型的所有有屬性。構造子方方法初始始化一個個對象類類型的

26、實實例,并并將它它的屬性性賦值。例:insertintoemployeesvalues(employee_type(1 ,Jone ,500 ,5-10月-1989);對象表操操作建表createtableemployees of employee_type;插入數據據insertintoemployeesvalues(employee_type(1,Jone,500,5-10月-1989);insertintoemployees-省略略構造方方法values(1,Jone,1500, 5-10月-1989);insertintoemployeesvalues(2,smith,700,10-5

27、月-1997);insertintoemployeesvalues(3,king,900,25-12月-2000);獲取行對對象value函數數value(對象表別別名)返返回一個個行對象象(對象象類型)value用于從對對象表中中取得對對象實例例。不使用value, SELECT只能返回回一個對對象的各各個列值值。select*from employees;EMPNOENAMESALHIREDATE-1Jone150005-10月-892smith70010-5月-973king90025-12月 -00selectvalue(e)fromemployeese;VALUE(E)(EMPNO,

28、ENAME, HIREDATE)-EMPLOYEE_TYPE(1, Jone,1500,05-10月-89)EMPLOYEE_TYPE(2, smith, 700,10-5月-97)EMPLOYEE_TYPE(3, king,900,25-12月 -00)對象表方方法調用用selectename,hiredatefrom employeeswhereempno=1;EMPNAMEHIREDATE-Jone05-10月-89selectename,e.days_at_company() daysfrom employeesewhereempno=3;EMPNAMEDAYS-king45使用別名名

29、在PL/SQL程序中,取得的的對象實實例必須須被相同同類型的的對象變變量接收收。例:declareempemployee_type;beginselectvalue(e)intoempfrom employeesewhereempno=1;emp.raise_salary(500);end;/PL/SQL中對象方法法的調用用PL/SQL中對象方法法的調用用DECLAREemp_variableemployee_type;days_employednumber;BEGINSELECTVALUE( e)INTO emp_variableFROM employeeseWHEREe.empno =3;

30、days_employed := emp_variable.days_at_company();dbms_output.put_line(Daysemployed:|to_char(days_employed);END;/附:PL/SQL輸出與環(huán)環(huán)境設置置執(zhí)行結果果:Days employed:26PL/SQL輸出(利利用包過過程)dbms_output.put_line() ;環(huán)境設置置exec dbms_output.enablesetserveroutput on對象方法法小結對象類型型總是有有1到多多個方法法(構造造方法是是隱含方方法,成成員方法法為0n個。成員方法法可以帶帶輸入輸輸出

31、參數數。每個成員員方法含含有名為為SELF的隱隱含第一一參數,它具有有與對象象類型自自身相同同的類型型。定義函數數方法,如沒參參數不用用寫括號號,但調調用時要要寫括號號。定義義方法形形參時,類型不不用寫長長度,如如varchar2對象表的的特性對象表是是只用對對象類型型定義的的數據庫庫表,不不含關系系型列。對象表的的列對應應(用來來創(chuàng)建表表的)對對象類型型的屬性性。對象表的的行是表表類型的的對象(實例),每一一行都有有一個系系統(tǒng)分配配的唯一一的對象象標識符符(OID)對象ID(OID)是每一個個行對象象的唯一一描述符符,是全全局唯一一的,并并且可以以引用OID不用于定定位數據據,ROWID仍用

32、于定定位數據據oracle通過對象象引用實實現數據據庫中不不同對象象之間的的聯(lián)系(與關系系表完全全不同)獲取對象象引用ref 函數數具有OID的對象實實例可以以被引用用(REF)ref(對象表的的別名)返回對象象表實例例指針,即行對對象的引用。例:selectref(e)fromemployeese ;REF(e)-000028020965D.0BEFE0340800209ADC5901403BE50000000028020965D.0BEFE0340800209ADC5901403BE50001000028020965D.0BEFE0340800209ADC5901403BE50002對象引

33、用用例建立對象象表custCreatetypecust_typeasobject(custidnumber(5),namename_type,addressaddress_type); createtablecustofcust_type(custid primarykey );對象引用用例向cust表中插入入數據insertintocustvalues(1,name_type(王,至遠),address_type(北京,白頤頤路5號號,100084) );insertintocustvalues(2,name_type(張,大年),address_type(天津,康寧寧里20號,300072

34、);insertintocustvalues(3,name_type(趙,力平),address_type(上海,南京京路23號,200092);對象引用用例查詢cust表select*from custwherecustid=1;selectc.address.city,c.address.zipfrom .first_name=王;修改cust表結構?altertablecustadd(address1address_type);不允許!對象引用用例建立goods_typeCREATETYPEgoods_type AS OBJECT(gnoNUMBER(3)

35、,gnamevarchar2(20),pricenumber(6,2);/CREATETABLEgoodsOFgoods_type( constraintp1primarykey(gno);INSERTINTOgoodsVALUES(101,電視機,2900);INSERTINTOgoodsVALUES(102,洗衣機,1500);對象引用用例CREATETYPEorder_type AS OBJECT(orderidNUMBER(3),customerREFcust_type,orderdateDATE,qtyNUMBER(5),gnoNUMBER(3);/CREATETABLEorders

36、 OF order_type( FOREIGNKEY (gno) REFERENCESgoods(gno) ;對象引用用例-customer-gnonumberorders-2張張大年-custgno-goodsOID=對象表對象引引用REF是指向行行對象的的指針,易于實實現表和和表之間間的聯(lián)系系,對象象之間連連接不再再需要關關系表的的連接(JOIN)操作。將對象表表的表別別名作為為REF的參數,可以取取得對應應OID的引用值值。引用只能能用于具具有OID的對象。customerREFcust_typeSCOPEISCUSTSCOPE子句用于于限定一一個引用用在一個個指定表表中,這這樣可以以提

37、高查查詢性能能,并減減少存儲儲指針的的空間。INSERTINTOordersSELECT1, ref(c),7-1月-2000,165,101FROM custcWHEREcustid=1;UPDATEordersSETcustomer=( SELECTREF(c )FROMcust cWHEREcustid=2 )WHEREorderid =1;引用類型型數據的的操作引用類型型數據的的操作SELECTcustomerFROM ordersWHEREorderid =1;22020865F009D0AC26242A35E0340800SELECTo.customer.custid顧客號,o.c

38、.last_name名,orderdate日期FROM ordersoWHEREorderid =1顧客號名名日日期-2大年07-1月-00對象引用用簡化化了代碼碼數據庫管管理對象象間的連連系,用用戶只需需通過屬屬性進行行對象的的引用。在關系設設計中, 開發(fā)發(fā)人員必必須使用用聯(lián)接(JOIN)SELECTname,address,.FROM orderso,cust cWHEREo.custid= c.custid andorderid=1;deref函數數deref(ref指針)返返回指針針指向的的對象本本身例:selectderef(customer)from ord

39、erswhere orderid=1;DEREF(CUSTOMER)(CUSTID,NAME(FIRST_NAME, LAST_NAME),ADDRESS(CITY, STREET,ZIP)-CUST_TYPE(2,NAME_TYPE(張張,大年年), ADDRESS_TYPE(天津,康寧里里20號號,300072)試比較:selectderef(ref(c)from custcwherecustid=2;和selectvalue(c)fromcust cwherecustid=2;SQL語語句中的的排序和和比較傳統(tǒng)的數數據類型型主要為為標量數數據類型型:number, char,date標量

40、數據據類型可可以排序序(如orderby)排序在SQL語句的使使用:關系運算算(標標量類類型方法返回回一個傳傳統(tǒng)數據據類型用用于排序序。沒有輸入入參數(只有一一個隱含含參數SELF)。方法被隱隱含調用用。在類型定定義中說說明MAP方法:CREATETYPEname_typeASOBJECT (first_namevarchar2(4),last_namevarchar2(4),MAPMEMBERFUNCTIONname_mapRETURNvarchar2);在類型體體中實現現MAP方法:CREATETYPEBODY name_typeASMAPMEMBER FUNCTION name_mapR

41、ETURN varchar2 ISBEGINRETURNfirst_name|last_name;END;END;排序:SELECTcustid ,c.address.cityFROM custcORDERBYname desc;任何基于于name_type類型的的排序按按名稱的的拼接串串作為大大小比較較的依據據。MAP方方法例例MAP方方法隱含含調用ORDER方法決定類型型實例的的序列關關系。有一個參參數(外外加一個個隱含的的參數SELF)函數方法法返回一一個整數數如果對象象自身比比參數對對象小, 返回回 -1如果對象象自身與與參數對對象相等等,返返回0如果對象象自身比比參數對對象大, 返回

42、回 1ORDER方法例1在類型定定義中聲聲明order方法:CREATEor replaceTYPEaddress_typeASOBJECT( cityVARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6),ORDERMEMBERFUNCTIONaddress_order(other_addressaddress_type)RETURNINTEGER);在類型體體中實現現方法:CREATEORREPLACETYPE BODYaddress_typeASORDERMEMBERFUNCTIONaddress_order(other_addressaddress_t

43、ype)RETURNINTEGERISBEGINIFself.zip other_address.zip THENRETURN-1;ELSE RETURN0;ENDIF;END;END;ORDER方法例1郵編數小小的地址址大ORDER方法例1排序:.first_name姓,.last_name名,c.address.city城市,c.address.zip郵編from custcorderbyc.address desc;排序結果果:姓名名城城市郵郵編-王至至遠遠北北京100084趙力力平平上上海200092張大大民民天天津300072ORDER方法例2CR

44、EATEORREPLACETYPEemployee_typeASOBJECT(empnoNUMBER(3),enameVARCHAR2(10),salNUMBER(6.2),hiredateDATE ,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER) ,PRAGMARESTRICT_REFERENCES(days_at_company,WNDS ,WNPS) ,ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)

45、RETURNINTEGER);ORDER方法例2CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+ increment_salWHEREempno= SELF.empno;END;ORDER方法例2ORDERMEMBERFUNCTIONemp_

46、order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredate- other_emp.hiredate) );END;END;/ORDER方法例2select*from employeeseorderbyvalue(e);-按對象大大小排序序EMPNOENAMESALHIREDATE-3king90025-12月-002smith70010-5月-971Jone150005-10月-89對象類型型維護ALTERTYPEemployee_typeREPLACEASOBJECT(empnoNUMBER,ena

47、meVARCHAR2(10),salNUMBER,hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER),PRAGMARESTRICT_REFERENCES(days_at_company,wnds,wnps), 對象類型型維護ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGER,MEMBERFUNCTIONmonth_at_company-新方法RETURNNUMB

48、ER,PRAGMARESTRICT_REFERENCES(month_at_company,wnds) );/對象類型型維護CREATEOR REPLACETYPEBODY employee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate- hiredate);END;MEMBERPROCEDURE raise_salary(increment_sal NUMBER)ISBEGINUPDATEemployeesSETsal= sal+ increment_salWHEREempno= SELF.

49、empno;END;對象類型型維護ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredateother_emp.hiredate) );END;MEMBERFUNCTIONmonth_at_companyRETURNNUMBERISBEGINRETURNmonths_between(sysdate,hiredate);END;END;/對象類型型信息與類型有有關的數數據字典典視圖user_typestype_nameattributesmethodsuse

50、r_type_attrstype_nameattr_namelengthattr_type_nameuser_type_methodstype_namemethod_name對象類型型信息查看對象象類型selecttype_name,attributes,methodsfrom user_types;TYPE_NAMEATTRIBUTESMETHODS-ADDRESS_TYPE31EMPLOYEE_TYPE31NAME_TYPE20columntype_name formata20wrapcolumnattributesformat999 wrapcolumnmethodsformat999

51、wrap對象類型型信息查看類屬屬性定義義selectattr_name,length,attr_type_namefrom user_type_attrswheretype_name=ADDRESS_TYPE;ATTR_NAMELENGTHATTR_TYPE_NAME-CITY20VARCHAR2STREET30VARCHAR2ZIPNUMBER對象類型型信息查看類方方法定義義selecttype_name ,method_namefrom user_type_methods;TYPE_NAMEMETHOD_NAME-ADDRESS_TYPEADDRESS_ORDEREMPLOYEE_TYPE

52、DAYS_AT_COMPANYEMPLOYEE_TYPEMONTH_AT_COMPANYEMPLOYEE_TYPEEMP_ORDERNAME_TYPENAME_MAP對象類型型相關性性在對象和和對象類類型之間間存在相相關樹。必須保保證樹的的完整。不允許許破壞被被引用的的類型。例如:drop typename_type;當類型已被被引用時時不讓刪刪drop typename_type force ;強行刪除除,再查查使用該該類型定定義的表表時出錯錯。name_typeaddress_type對象類型型相關性性workercust_typeCustemployee_typeemployeesord

53、ersgoodsgoods_typeorder_type查看對象象相關性性例:selectname,type,referenced_nameRname,referenced_typeRtypefrom user_dependencieswherename=ORDERS ;NAMETYPERNAMERTYPE-ORDERSTABLESTANDARDPACKAGEORDERSTABLECUST_TYPETYPEORDERSTABLEORDER_TYPETYPE查看對象象相關性性例:=CUSTnametypeRnameRtype-CUSTTABLESTANDARDPACKAGE

54、CUSTTABLENAME_TYPETYPECUSTTABLEADDRESS_TYPETYPECUSTTABLECUST_TYPETYPE例:selectreferenced_name=cust_type;查看哪些些對象使使用了cust_type類型。查看對象象相關性性例:=CUST_TYPE;nametypeRnameRtype-CUST_TYPETYPESTANDARDPACKAGECUST_TYPETYPENAME_TYPETYPECUST_TYPETYPEADDRESS_TYPETYPE列出依賴賴樹:執(zhí)行oracle根目錄/rdbms/admin/utldtree

55、.sql生成兩個個視圖deptree和ideptree程序視圖圖顯示依依賴樹。小結對對象屬性性和方法法當使用表表的當前前行對象象時,對對象屬性性和方法法的引用用必須使使用表的的別名,而不能能是實際際的表名名selectc.address.city,c.address.zipfrom .first_name=王;selecte.days_at_company()from employeesewheree.empno=3;小結列列對象與與行對象象列對象:嵌入型型對象,作為表表中的列列來處理理的對象象,要通通過主表表才能訪訪問。自定義復復合數據據類型可變數組組嵌套表行

56、對象:不是嵌嵌入型對對象,而而是引用用型對象象,可以以通過其其他對象象的引用用(ref)來訪問。列對象沒沒有OID,而且不能能被引用用。列對象是是基于對對數據庫庫已有功功能的擴擴充(自自定義類類型)。收集類型型Oracle的數據類類型擴展展收集類型型實現一對對多關系系的模型型化。在關系設設計中,只能通通過聯(lián)接接(JOIN)實現表的的關聯(lián), 將導導致復雜雜的運算算。在對象設設計中,可以通通過收集集實現對對象類型型的關聯(lián)聯(lián)收集類型型記錄數組表收集類型型-可可變數組組支持有序序的一對對多的關關系??梢栽谝灰恍兄写娲鎯δ硞€個記錄的的重復屬屬性??勺儯付ǘ〝到M最最大容量量。數組元素素具有相相同類

57、型型,可以以是基基本類型型、REF或對象類類型。但但不能是是嵌套表表或可變變數組類類型。不能是VARRAYOFLOB類型book數據結構構分析化學學 相關圖Book_list_type(varray(5)ofvarchar2(10)borrower_type (sno,sname,class,books)borrower使用數組組類型定義數組組類型CREATETYPEbook_list_typeASVARRAY(5)OFVARCHAR2(10);建借閱者者表的類類型CREATETYPEborrower_type AS OBJECT(snoNUMBER(6),snameVARCHAR2(10),

58、classVARCHAR2(10),booksbook_list_type,MEMBERFUNCTIONadd_book(bookVARCHAR2)RETURNbook_list_type,PRAGMArestrict_references(add_book, WNDS);在方法中中處理數數組類型型數據實現類方方法CREATETYPEBODY borrower_typeASMEMBERFUNCTIONadd_book(bookvarchar2)RETURNbook_list_typeIStemp_arraybook_list_type;counterINTEGER;BEGINtemp_arra

59、y := SELF.books;counter := temp_array.COUNT+1;temp_array.EXTEND;temp_array(counter) := book;RETURNtemp_array;END;END;建含有數數組的對對象表CREATETABLEborrowerOFborrower_type;收集類型型-收收集的方方法收集(collection)的方法: 內置置的函數數和過程程函數方法法:EXISTS(n)當收集類類型中指指定元素素存在為為“真”COUNT返回當前前收集類類型中的的元素個個數。LIMIT返回可變變數組元元素個數數的上限限值FIRSTandLAST

60、返回收集集中第一一個和最最后一個個元素的的下標。 (對對于可變變數組,總是返返回1和和count)PRIOR(n)andNEXT(n)返回指定定元素的的前一個個和后一一個元素素的下標標。收集類型型-收收集的方方法過程方法法:EXTEND擴充收集集的大小小extend擴充一個個空元素素extend(n)擴充n個空元素素extend(n,I)將收集中中第I個元素拷拷貝n份,追加加到收集集中。TRIM從收集尾尾部刪除除元素trim刪除收集集中最后后一個元元素trim(n)刪除收集集中最后后n個元素DELETE刪除元素素delete刪除收集集中所有有元素delete(n)刪除收集集中第n個元素dele

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論