版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Oracle8對象關系數(shù)據(jù)庫高端數(shù)據(jù)庫-提高DBMS管理上限Oracle8對象關系數(shù)據(jù)庫擴充的類型系統(tǒng)對象關系數(shù)據(jù)庫Oracle8數(shù)據(jù)庫系統(tǒng)
一、高端數(shù)據(jù)庫-提高DBMS管理上限
oracle7 oracle8
數(shù)據(jù)庫大小 32TB 512KTB 數(shù)據(jù)文件個數(shù) 1-4K 64-256M每表包含列 數(shù) 254 1000 每表的LOB列數(shù) 1long 1000 CHAR長度 254 2000VARCHAR長度 2000 4000索引列數(shù) 16 32 支持上萬個并發(fā)用戶多線程服務器(用少量的服務器端進程管理大量的客戶端用戶。Net8(SQL*net)連接管理器—連接池(TNS資源)、多路傳輸、應用請求集中化更有效地使用網(wǎng)絡資源避免操作系統(tǒng)對服務器網(wǎng)絡連接數(shù)的限制客戶端(服務器)服務器一、高端數(shù)據(jù)庫-提高DBMS管理上限網(wǎng)絡層透明網(wǎng)絡底層協(xié)議適配器二、擴充的類型系統(tǒng)
-對象關系數(shù)據(jù)庫
關系模型與對象模型新的數(shù)據(jù)類型-對象(記錄)類型對象表—面向?qū)ο髷?shù)據(jù)庫設計收集類型(數(shù)組與嵌套表)
對象與視圖
數(shù)據(jù)庫新的應用領域計算機輔助設計
CAD數(shù)據(jù)庫必須存儲和處理與工程設計相關的數(shù)據(jù)(產(chǎn)品部件及相互關系、設計版本…)計算機輔助軟件工程數(shù)據(jù)庫中存儲軟件開發(fā)人員用到的各種數(shù)據(jù),包括源代碼、模塊之間依賴關系、變量定義、文檔…多媒體數(shù)據(jù)庫聲音、視頻、圖象…辦公信息系統(tǒng)超文本數(shù)據(jù)庫應用需要新的數(shù)據(jù)類型——論文檢索系統(tǒng)論文標題作者列表(第一作者,第二作者,找出某人參與撰寫的所有論文…)檢索關鍵字發(fā)表日期(年月日分開)傳統(tǒng)關系數(shù)據(jù)庫的數(shù)據(jù)類型復雜屬性只能拆分成并列的單一屬性姓名,地址(省、市、區(qū)、街道、門牌號)本來是一個結合緊密的整體,在關系數(shù)據(jù)庫中卻只能拆成單一屬性,與其他屬性并列(如姓名、年齡等),沒有反映出它們的緊密關系。無法表示變長的屬性家庭記錄有幾個孩子長字段設幾個字段(不好估計)家庭編號戶主子女1子女2子女3…傳統(tǒng)關系數(shù)據(jù)庫的數(shù)據(jù)類型無法直接表示嵌套表例:一張發(fā)貨單,發(fā)三種貨物:放3條記錄,但公共信息存3遍(查詢方便)拆成兩張表(發(fā)貨單,發(fā)送貨物),需要連接,費時,且要清楚表與表的關系貨單號發(fā)貨人貨物日期…發(fā)往地貨物名稱價格數(shù)量關系數(shù)據(jù)庫的數(shù)據(jù)模型數(shù)據(jù)模型是模型化數(shù)據(jù)和信息的工具?,F(xiàn)實世界認識抽象信息世界-概念數(shù)據(jù)模型機器世界-DBMS支持的數(shù)據(jù)模型關系模型轉換數(shù)據(jù)模型型演變文件系統(tǒng)統(tǒng)(OS)層次模型型——網(wǎng)網(wǎng)狀模型型——關關系模型型(DB)特點:面向記錄錄,信息息由定長長記錄組組成。記錄簡單單(短小?。?。原子字段段,字段段不再含含有結構構。關系模型型的特點點強調(diào)數(shù)據(jù)據(jù)的獨立立性(以以數(shù)據(jù)為為中心)),數(shù)據(jù)據(jù)與程序序分離。。采用關系系模型、、概念單單一,實實體和聯(lián)聯(lián)系都是是用關系系來表示示。關系必須須是規(guī)范范化的關關系,要要求每一一分量不不可再分分。支持關系系語言,,具有高高度非過過程化,,支持集集合運算算通過外來來碼實現(xiàn)現(xiàn)表的連連接(多多表查詢詢)Oracle8—擴擴充的類類型系統(tǒng)統(tǒng)是對關系系數(shù)據(jù)模模型進行行的擴充充。提供更為為豐富的的面向?qū)ο蟮念愵愋拖到y(tǒng)統(tǒng)。擴充的類類型系統(tǒng)統(tǒng)允許元元組的屬屬性值為為復雜類類型,在在關系查查詢語言言中增加加處理新新數(shù)據(jù)類類型的成成分。既保留關關系模型型基礎又提高建建模能力力對象關系系模型為為希望使使用面向向?qū)ο筇靥卣鞯年P關系數(shù)據(jù)據(jù)庫用戶戶提供可可能。面向?qū)ο笙蟮幕颈靖拍蠲嫦驅(qū)ο笙蠓椒ㄊ鞘且砸饨鉀Q的問問題中所所涉及到到的各種種對象為為主要考考慮因素素。對象是一一種看問問題的觀觀點,是是對現(xiàn)實實世界各各種元素素的一種種抽象。。對象既既含數(shù)據(jù)據(jù)又含功功能,因因此具有有自身處處理數(shù)據(jù)據(jù)的能力力。對象象被認為為是迄今今為止最最接近真真實事物物的數(shù)據(jù)據(jù)抽象。?,F(xiàn)實世界界中對象象有兩個個共同的的特點::一方面,,它們都都有自己己的狀態(tài)態(tài)。如一一臺電視視機有自自己的擺擺放位置置,有關關機和開開機狀態(tài)態(tài),此刻刻正在播播放某一一頻道的的電視節(jié)節(jié)目等另一方面面,它們們又都有有自己的的行為,,如電視視機的開開機、關關機、調(diào)調(diào)臺等。。面向?qū)ο笙蟮幕颈靖拍顑?nèi)部實現(xiàn)現(xiàn)(封裝))接口屬性、方方法能動的主主體使電腦貼貼近人腦腦的思維維模式((減少人人認識問問題時的的認識空空間和計計算機處處理問題題時的方方法空間間的不一一致性))。實現(xiàn)軟件件的復用用(軟件件芯片))。對象的屬屬性與方方法面向?qū)ο笙蟪绦蛟O設計中的的對象是是現(xiàn)實世世界對象象的模型型化,它它同樣具具有狀態(tài)態(tài)和行為為。對象的狀狀態(tài)用屬屬性來維維護,對象的行行為用方方法來實實現(xiàn)。因此可以以簡單地地講,對對象是面面向?qū)ο笙蟮某绦蛐蛟O計模模式,它它由描述述對象狀狀態(tài)的屬屬性(變變量)和和用來實實現(xiàn)對象象行為的的方法((代碼))組成。。對象與類類相關對象象的集合合稱為類類(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)概念,,因為只只有在運運行時才才給對象象分配空空間,對對象才真真正存在在。面向?qū)ο笙蟮臄?shù)據(jù)據(jù)模型在一些應應用中,,用戶將將數(shù)據(jù)庫庫中的數(shù)數(shù)據(jù)看作作是一組組對象而而非一組組記錄。。面向?qū)ο笙蟮臄?shù)據(jù)據(jù)模型是是面向?qū)ο蟪绦蛐蛟O計思思想在數(shù)數(shù)據(jù)庫系系統(tǒng)中的的應用。?;舅枷胂搿獙?shù)數(shù)據(jù)和操操作這些些數(shù)據(jù)的的程序代代碼封裝裝在一個個對象里里。將一個對對象存儲儲在數(shù)據(jù)據(jù)庫中::對象的數(shù)數(shù)據(jù)部分分必須針針對各個個對象分分別存儲儲。而實現(xiàn)類類方法的的程序代代碼應該該和類的的定義一一起作為為數(shù)據(jù)庫庫模式的的一部分分存儲。。面向?qū)ο笙髷?shù)據(jù)庫庫數(shù)據(jù)庫中中不是只只存儲單單純的數(shù)數(shù)據(jù),而而是存儲儲包含屬屬性和方方法的對對象。對于一個個數(shù)據(jù)庫庫對象,,可定義義在其上上運行的的過程和和函數(shù)。。使數(shù)據(jù)據(jù)庫中的的數(shù)據(jù)和和訪問該該數(shù)據(jù)的的方法聯(lián)聯(lián)系起來來,可標標準化數(shù)數(shù)據(jù)訪問問的方法法并提高高對象的的可復用用性。應用邏輯輯從應用用程序中中移動到到數(shù)據(jù)庫庫中(對對象方法法)創(chuàng)建通用用的數(shù)據(jù)據(jù)庫對象象,并能能成為數(shù)數(shù)據(jù)庫對對象的標標準,可可實現(xiàn)數(shù)數(shù)據(jù)庫對對象的重重用。數(shù)據(jù)模型型現(xiàn)實世界界認識抽象信息世界界-概念念數(shù)據(jù)模模型機器世界界-DBMS支持的數(shù)數(shù)據(jù)模型對象模型型轉換對象模型型與關系系模型對象模型型對象類型型的屬性性描述對象類型型的方法法封裝了了操作該該對象的的代碼。。提供了了處理數(shù)數(shù)據(jù)庫中中數(shù)據(jù)的的界面。。關系模型型二維表中中列的定定義沒有方法法另編程可使用操操作某數(shù)數(shù)據(jù)庫表表的存儲儲過程。。面向?qū)ο笙髷?shù)據(jù)模模型中的的類概念念—實體體集概念念。面向?qū)ο笙髷?shù)據(jù)模模型中的的對象概概念—實實體概念念對象模型型與關系系模型關系模型型可用二二維表來來表示———關關系表表:屬性——二二維表的的列元組——二二維表的的行對象模型型可用二二維表來來表示———對對象表表:用一個類類(對對象類型型)定義義一個對對象表類的屬性性—二二維表表的列對象(類類的實例例)——二二維表表的行((行對象象)通過對象象調(diào)用對對象方法法。Oracle的的擴充類類型Oracle是一個開開放的類類型系統(tǒng)統(tǒng),增加加了復雜雜的數(shù)據(jù)據(jù)類型以以及用戶戶自定義義類型用戶定義義的數(shù)據(jù)據(jù)類型使使得可以以在數(shù)據(jù)據(jù)庫中為為現(xiàn)實世世界的對對象建模模對象類型型(記錄錄類型))數(shù)組類型型嵌套表類類型創(chuàng)建對象象表,實實現(xiàn)面向向?qū)ο蟮牡臄?shù)據(jù)庫庫設計((而非關關系型數(shù)數(shù)據(jù)庫設設計。應用邏輯輯從應用用程序中中移動到到數(shù)據(jù)庫庫中(對對象方法法)擴充類型型的不同同應用對象類型型數(shù)數(shù)組類型型嵌嵌套表類類型關系表對對象表對象類型利用對象象類型定定義復復合數(shù)據(jù)據(jù)類型用戶自定定義數(shù)據(jù)據(jù)類型使用對象象類型定定義一個個記錄數(shù)數(shù)據(jù)類型型CREATETYPEname_typeASOBJECT(first_nameVARCHAR2(4),last_nameVARCHAR2(4));CREATETYPEaddress_typeASOBJECT( cityVARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6));CREATETABLEworker(widNUMBER(5)PRIMARYKEY,wnamename_type,addressaddress_type);對象類型數(shù)數(shù)據(jù)的操作作使用對象類型聲明了關系表中的列,DML語句必須用用一些特殊殊的語法插入新記錄錄時,對于于對象類型型的列,要要使用構造造函數(shù)構造造出對應類類型的數(shù)據(jù)據(jù)。構造函數(shù)是是對象類型型的特殊方方法,利用用此方法為為該類型創(chuàng)創(chuàng)建對象。。構造方法法的名稱與與對象類型型(類)同同名。對記錄型數(shù)數(shù)據(jù)的分量量進行操作作時,要使使用“別名名”對象類型數(shù)數(shù)據(jù)的操作作插入語句例例:insertintoworkervalues(1,name_type('王','至至遠'),address_type('北京','白頤路5號',100084));insertintoworkervalues(2,name_type(‘張’,‘大大年'),address_type(‘天津’,‘‘康寧里20號’,300072));insertintoworkervalues(3,name_type('趙','力力平'),address_type('上海','南京路23號',200092));對象類型數(shù)數(shù)據(jù)的查詢詢查詢語句1select*fromworker;WIDNAME(FIRST_NAME,LAST_NAME)ADDRESS(CITY,STREET,ZIP)-----------------------------------------------------------------------------------------------------1NAME_TYPE(‘王’,‘‘至遠’)ADDRESS_TYPE('北京','白頤路路5號',100084)2NAME_TYPE(‘張’,‘‘大年’)ADDRESS_TYPE(‘天津’,‘‘康寧里里20號’’,300072)3NAME_TYPE(‘趙’,‘‘力平’)ADDRESS_TYPE(‘上?!?‘‘南京路路23號’’,200092)查詢語句2selectwid,wnamefromworker;WIDNAME(FIRST_NAME,LAST_NAME)----------------------------------------------------------1NAME_TYPE(‘王’,‘‘至遠’)2NAME_TYPE(‘張’,‘‘大年’)3NAME_TYPE(‘趙’,‘‘力平’)對象類型數(shù)數(shù)據(jù)的查詢詢查詢語句3(用用別名)selectwid顧客編號,w.address.city城市,w.address.street街道,w.address.zip郵編fromworkerw;顧客編號城城市街街道道郵郵編-------------------------------------------------1北北京京白白頤路5號1000842天天津津康康寧里20號3000723上上海海南南京路23號200092查詢語句4(別名的的使用)select*fromworkerworderbyw.address.zip對象類型數(shù)數(shù)據(jù)的操作作修改updateworkerwsetw.address.zip=100083wherewid=1;刪除deletefromworkerwherewid=1;.first_name=‘‘王’;修改表結構構altertablecustadd(address1address_type);不能對表修修改自定義的數(shù)數(shù)據(jù)類型格格式用戶自定義義數(shù)據(jù)類型型對象類型更更加貼近現(xiàn)現(xiàn)實世界的的數(shù)據(jù)特征征。使用對象類類型可以更更加統(tǒng)一、、自然地聲聲明和操作作表中的數(shù)數(shù)據(jù)(在整個數(shù)據(jù)據(jù)庫中地址址一致性))創(chuàng)建可為大大家引用的的新數(shù)據(jù)類類型:創(chuàng)建一個模模式(如pub)建立公共對對象類型((新數(shù)據(jù)類類型)設置必要的的權限使用CREATEPROCEDUREnew_worker(widNUMBER,_type,addresspub.address_type)自定義數(shù)據(jù)據(jù)類型上的的索引createindexaaaonworker(wname);ORA-02327:無法在具有有數(shù)據(jù)類型型ADT的列上創(chuàng)建建索引。(即使在name_type類中定義了了排序方法法也不可以以)如經(jīng)常進行行如下查詢詢:selectwid顧客編號,w.address.city城市,w.address.street街道,w.address.zip郵編fromworkerwwherew.address.zip=100084;可建索引如如下:createindexI_ziponworker(address.zip);使用對象表表——面向?qū)ο髷?shù)據(jù)庫庫設計建立對象表表的類建類型(對對象類型聲聲明)createtype類型名asobject(屬性名1類類型說說明,屬性名2類類型說說明,…...memberfunction函數(shù)名(參數(shù)說明明)return返回類型,memberprocedure過程名(參參數(shù)說明),…);方法說明屬性說明對象屬性類類型對象類型必必須包含一一個或多個個屬性,屬屬性的類型型可以是:Oracle的原始數(shù)據(jù)據(jù)類型、LOB對象對象的引用用(REF)收集(COLLECTION)等對象方法方法是一個個過程或函函數(shù),是是對象類型型定義的一一部分,是是程序員編編寫的用于于操縱對象象屬性的子子程序,被被封裝在對對象類型中中。方法的種類類:成員方法(member)構造方法(constructor)MAP或ORDER方法(排序序方法)一個類可以以有多個方方法(也可可以不定義義方法)對象類型不不存儲數(shù)據(jù)據(jù);必須創(chuàng)創(chuàng)建相應的的表來存儲儲數(shù)據(jù)編寫方法代代碼建類型體((實現(xiàn)類成成員方法))createtypebody類型名ASmemberfunction函數(shù)方法名名(參數(shù)數(shù)說明)return返回類型is說明部分begin執(zhí)行部分end;memberprocedure過程方法名名(參數(shù)說說明)is說明部分begin執(zhí)行部分end;END;方法實現(xiàn)方法實現(xiàn)建立對象表表建對象表Createtable表名of對象類型((…);例:CREATETYPEemployee_typeASOBJECT(...);CREATETABLEemployeesOFemployee_type(empnoconstrainte1primarykey);CREATETYPEBODYemployee_type(…);表定義的其其他說明,,如完整性性約束等,,表的列不不能再定義義建立對象類類型例CREATETYPEemployee_typeASOBJECT(empno NUMBER(3),ename VARCHAR2(10),salNUMBER(6.2),hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER));/創(chuàng)建對象表表CREATETABLEemployeesOFemployee_type(PRIMARYKEY(empno),UNIQUE(ename),CHECK(sal>300));建立對象類類型體CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+increment_salWHEREempno=SELF.empno;END;END;對方法的限限制編譯軟件包包中的函數(shù)數(shù)或過程時時,可以以使用PRAGMA編譯指令通通知PL/SQL編譯器禁止止某方法對對數(shù)據(jù)庫表表和包中的的變量讀寫寫,當方方法體中出出現(xiàn)違反情情況時,編編譯出錯錯。格式:PRAGMARESTRICT_REFERENCES(function_name,WNDS[,WNPS][,RNDS][,RNPS]);WNDS不允許寫數(shù)數(shù)據(jù)庫RNDS不允許讀數(shù)數(shù)據(jù)庫WNPS不允許改程程序包變量量RNPS不允許引用用程序包變變量對方法的限限制CREATEORREPLACETYPEemployee_typeASOBJECT(empno NUMBER,ename VARCHAR2(10),salNUMBER,hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER),PRAGMARESTRICT_REFERENCES(days_at_company,WNDS,WNPS));對方法法的限限制CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);UPDATEemployeesSEThiredate=hiredate+30;--END;…..END;-----------------------------------------------------------------------0/0PL/SQL:Compilationunitanalysisterminated2/10PLS-00452:子程序序'DAYS_AT_COMPANY'違反了了它的的相關關編譯譯指令令對象類類型--構構造子子方法法Oracle自動地地為每每個對對象類類型創(chuàng)創(chuàng)建一一個構構造方方法。。構造子子方法法的名名稱采采用對對象類類型名名。構造子子方法法的參參數(shù)即即對象象類型型的所所有屬屬性。。構造子子方法法初始始化一一個對對象類類型的的實例例,并并將將它的的屬性性賦值值。例:insertintoemployeesvalues(employee_type(1,‘‘Jone’’,500,‘5-10月-1989’’));對象表表操作作建表createtableemployeesofemployee_type;插入數(shù)數(shù)據(jù)insertintoemployeesvalues(employee_type(1,‘Jone’’,500,‘‘5-10月-1989’’));insertintoemployees--省省略構構造方方法values(1,‘‘Jone’,1500,‘‘5-10月-1989’’);insertintoemployeesvalues(2,'smith',700,‘‘10-5月-1997');insertintoemployeesvalues(3,‘‘king’,900,’25-12月-2000’’);獲取行行對象象—value函數(shù)數(shù)value(對象表表別名名)返返回一一個行行對象象(對對象類類型))value用于從從對象象表中中取得得對象象實例例。不使用用value,SELECT只能返返回一一個對對象的的各個個列值值。select*fromemployees;EMPNOENAMESALHIREDATE----------------------------------------------------------------------------------1Jone150005-10月-892smith70010-5月-973king90025-12月-00selectvalue(e)fromemployeese;VALUE(E)(EMPNO,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')對象表表方法法調(diào)用用selectename,hiredatefromemployeeswhereempno=1;EMPNAMEHIREDATE--------------------------------------------Jone05-10月-89selectename,e.days_at_company()daysfromemployeesewhereempno=3;EMPNAMEDAYS-----------------------------------------------------------------------------------------------------------------king45使用用別別名名在PL/SQL程序序中中,,取取得得的的對對象象實實例例必必須須被被相相同同類類型型的的對對象象變變量量接接收收。。例::declareempemployee_type;beginselectvalue(e)intoempfromemployeesewhereempno=1;emp.raise_salary(500);end;/PL/SQL中對象象方方法法的的調(diào)調(diào)用用PL/SQL中對象象方方法法的的調(diào)調(diào)用用DECLAREemp_variableemployee_type;days_employednumber;BEGINSELECTVALUE(e)INTOemp_variableFROMemployeeseWHEREe.empno=3;days_employed:=emp_variable.days_at_company();dbms_output.put_line(‘‘Daysemployed:‘‘||to_char(days_employed));END;/附:PL/SQL輸出出與與環(huán)環(huán)境境設設置置執(zhí)行行結結果果::Daysemployed:26PL/SQL輸出出((利利用用包包過過程程))dbms_output.put_line(‘‘……’’);環(huán)境境設設置置execdbms_output.enablesetserveroutputon對象象方方法法小小結結對象象類類型型總總是是有有1到到多多個個方方法法((構構造造方方法法是是隱隱含含方方法法,,成成員員方方法法為為0~n個個。。成員員方方法法可可以以帶帶輸輸入入輸輸出出參參數(shù)數(shù)。。每個個成成員員方方法法含含有有名名為為SELF的的隱隱含含第第一一參參數(shù)數(shù),,它它具具有有與與對對象象類類型型自自身身相相同同的的類類型型。。定義義函函數(shù)數(shù)方方法法,,如如沒沒參參數(shù)數(shù)不不用用寫寫括括號號,,但但調(diào)調(diào)用用時時要要寫寫括括號號。。定定義義方方法法形形參參時時,,類類型型不不用用寫寫長長度度,,如如varchar2對象象表表的的特特性性對象象表表是是只只用用對對象象類類型型定定義義的的數(shù)數(shù)據(jù)據(jù)庫庫表表,,不不含含關關系系型型列列。。對象象表表的的列列對對應應((用用來來創(chuàng)創(chuàng)建建表表的的))對對象象類類型型的的屬屬性性。。對象象表表的的行行是是表表類類型型的的對對象象(實實例例),,每每一一行行都都有有一一個個系系統(tǒng)統(tǒng)分分配配的的唯唯一一的的對對象象標標識識符符((OID)對象象ID(OID)是每每一一個個行行對對象象的的唯唯一一描描述述符符,是是全全局局唯唯一一的的,并并且且可可以以引引用用OID不用用于于定定位位數(shù)數(shù)據(jù)據(jù),ROWID仍用用于于定定位位數(shù)數(shù)據(jù)據(jù)oracle通過過對對象象引引用用實實現(xiàn)現(xiàn)數(shù)數(shù)據(jù)據(jù)庫庫中中不不同同對對象象之之間間的的聯(lián)聯(lián)系系((與與關關系系表表完完全全不不同同))獲取對象象引用——ref函數(shù)數(shù)具有OID的對象實實例可以以被引用用(REF)ref(對象表的的別名))返回對象象表實例例指針,,即行對對象的引用。例:selectref(e)fromemployeese;REF(e)------------------------------------------------------------------------------------------------------------------------------------------------------------------000028020965D...0BEFE0340800209ADC5901403BE50000000028020965D...0BEFE0340800209ADC5901403BE50001000028020965D...0BEFE0340800209ADC5901403BE50002對象引用用例建立對象象表custCreatetypecust_typeasobject(custidnumber(5),namename_type,addressaddress_type);createtablecustofcust_type(custidprimarykey);對象引用用例向cust表中插入入數(shù)據(jù)insertintocustvalues(1,name_type('王','至遠'),address_type(‘北京’,‘白頤頤路5號號’,100084));insertintocustvalues(2,name_type(‘張’,‘‘大年'),address_type('天津','康寧寧里20號',300072));insertintocustvalues(3,name_type('趙','力平'),address_type('上海','南京京路23號',200092));對象引用用例查詢cust表select*fromcustwherecustid=1;selectc.address.city,.first_name=‘‘王’;修改cust表結構???altertablecustadd(address1address_type);不允許?。。?!對象引用用例建立goods_typeCREATETYPEgoods_typeASOBJECT(gnoNUMBER(3),gnamevarchar2(20),pricenumber(6,2));/CREATETABLEgoodsOFgoods_type(constraintp1primarykey(gno));INSERTINTOgoodsVALUES(101,'電視機',2900);INSERTINTOgoodsVALUES(102,'洗衣機',1500);對象引用用例CREATETYPEorder_typeASOBJECT(orderidNUMBER(3),customerREFcust_type,orderdateDATE,qtyNUMBER(5),gnoNUMBER(3));/CREATETABLEordersOForder_type(FOREIGNKEY(gno)REFERENCESgoods(gno));對象引用用例----customer----gnonumberorders----2張張大年----custgno----goodsOID=對象表——對象引引用REF是指向行行對象的的指針,,易于實實現(xiàn)表和和表之間間的聯(lián)系系,對象象之間連連接不再再需要關關系表的的連接((JOIN)操作。將對象表表的表別別名作為為REF的參數(shù),可以取取得對應應OID的引用值值。引用只能能用于具具有OID的對象。。customerREF cust_typeSCOPEISCUSTSCOPE子句用于于限定一一個引用用在一個個指定表表中,這這樣可以以提高查查詢性能能,并減減少存儲儲指針的的空間。。INSERTINTOordersSELECT1,ref(c),‘‘7-1月-2000’’,165,101FROMcustcWHEREcustid=1;UPDATEordersSETcustomer=(SELECTREF(c)FROMcustcWHEREcustid=2)WHEREorderid=1;引用類型型數(shù)據(jù)的的操作引用類型型數(shù)據(jù)的的操作SELECTcustomerFROMordersWHEREorderid=1;22020865F009D0AC262…42A35E0340800…SELECTo.customer.custid顧客號,.last_name名,orderdate日期FROMordersoWHEREorderid=1顧客號名名日日期---------------------------2大年07-1月-00對象引用用—簡化化了代碼碼數(shù)據(jù)庫管管理對象象間的連連系,用用戶只需需通過屬屬性進行行對象的的引用。。在關系設設計中,開發(fā)發(fā)人員必必須使用用聯(lián)接(JOIN)SELECTname,address,...FROMorderso,custcWHEREo.custid=c.custidandorderid=1;deref函數(shù)數(shù)deref(ref指針)返返回指針針指向的的對象本本身例:selectderef(customer)fromorderswhereorderid=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))fromcustcwherecustid=2;和selectvalue(c)fromcustcwherecustid=2;SQL語語句中的的排序和和比較傳統(tǒng)的數(shù)數(shù)據(jù)類型型主要為為標量數(shù)數(shù)據(jù)類型型:number,char,date標量數(shù)據(jù)據(jù)類型可可以排序序(如orderby……)排序在SQL語句的使使用:關系運算算(><=)between及in的判斷orderbygroupbydistinct子句unique和primarykey約束自定義數(shù)數(shù)據(jù)類型型如何排排序selectwname,addressfromworkerorderbyaddress;錯誤位于于第2行行:ORA-22950:無法ORDER沒有MAP或ORDER方法的對對象對象類型型的排序序方法同類的排排序?qū)χеС钟脩魬舳x的的對象類類型很重重要。對象類型由于于結構復雜,必須借助助方法實現(xiàn)排排序和比較。。MAP方法將對象類類型轉換為傳傳統(tǒng)數(shù)據(jù)類型型。ORDER方法提供排序序規(guī)則。比較較本對象和另另一對象實例例,并返回回1,0,-1分別代表大于、等于、、小于。一個對象類型型只能有一個個MAP方法或一個ORDER方法:mapmemberfunction……ordermemberfunction…MAP方法法例對象類型---->標標量類型方法返回一個個傳統(tǒng)數(shù)據(jù)類類型用于排序序。沒有輸入?yún)?shù)數(shù)(只有一個個隱含參數(shù)SELF)。方法被隱含調(diào)調(diào)用。在類型定義中中說明MAP方法:CREATETYPEname_typeASOBJECT(first_namevarchar2(4),last_namevarchar2(4),MAPMEMBERFUNCTIONname_mapRETURNvarchar2);在類型體中實實現(xiàn)MAP方法:CREATETYPEBODYname_typeASMAPMEMBERFUNCTIONname_mapRETURNvarchar2ISBEGINRETURNfirst_name||last_name;END;END;排序:SELECTcustid,c.address.cityFROMcustcORDERBYnamedesc;任何基于name_type類型的的排序按名稱稱的拼接串作作為大小比較較的依據(jù)。MAP方法法例MAP方法隱隱含調(diào)用ORDER方法決定類型實例例的序列關系系。有一個參數(shù)(外加一個隱隱含的參數(shù)SELF)函數(shù)方法返回回一個整數(shù)如果對象自身身比參數(shù)對象象小,返回回-1如果對象自身身與參數(shù)對象象相等,返返回0如果對象自身身比參數(shù)對象象大,返回回1ORDER方法例1在類型定義中中聲明order方法:CREATEorreplaceTYPEaddress_typeASOBJECT(city VARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6),ORDERMEMBERFUNCTIONaddress_order(other_addressaddress_type)RETURNINTEGER);在類型體中實實現(xiàn)方法:CREATEORREPLACETYPEBODYaddress_typeASORDERMEMBERFUNCTIONaddress_order(other_addressaddress_type)RETURNINTEGERISBEGINIFself.zip<other_address.zipTHENRETURN1;ELSIFself.zip>other_address.zipTHENRETURN-1;ELSERETURN0;ENDIF;END;END;ORDER方法例1郵編數(shù)小的地地址大ORDER方法例1排序:.first_name姓,.last_name名,c.address.city城市,c.address.zip郵編fromcustcorderbyc.addressdesc;排序結果:姓名名城城市郵郵編------------------------------------------------王至至遠北北京100084趙力力平上上海200092張大大民天天津300072ORDER方法例2CREATEORREPLACETYPEemployee_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)RETURNINTEGER);ORDER方法例2CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+increment_salWHEREempno=SELF.empno;END;ORDER方法例2ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredate-other_emp.hiredate));END;END;/ORDER方法例2select*fromemployeeseorderbyvalue(e);--按對象大小排排序EMPNOENAMESALHIREDATE------------------------------------------------3king90025-12月-002smith70010-5月-971Jone150005-10月-89對象類型維護護ALTERTYPEemployee_typeREPLACEASOBJECT(empnoNUMBER,enameVARCHAR2(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--新方法RETURNNUMBER,PRAGMARESTRICT_REFERENCES(month_at_company,wnds));/對象類型維護護CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+increment_salWHEREempno=SELF.empno;END;對象類型維護護ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredate––other_emp.hiredate));END;MEMBERFUNCTIONmonth_at_companyRETURNNUMBERISBEGINRETURNmonths_between(sysdate,hiredate);END;END;/對象類型信息息與類型有關的的數(shù)據(jù)字典視視圖user_typestype_nameattributesmethods…user_type_attrstype_nameattr_namelengthattr_type_name……user_type_methodstype_namemethod_name…對象類型信息息查看對象類型型selecttype_name,attributes,methodsfromuser_types;TYPE_NAMEATTRIBUTESMETHODS--------------------------------------------------------------ADDRESS_TYPE31EMPLOYEE_TYPE31NAME_TYPE20columntype_nameformata20wrapcolumnattributesformat999wrapcolumnmethodsformat999wrap對象類型信息息查看類屬性定定義selectattr_name,length,attr_type_namefromuser_type_attrswheretype_name=‘ADDRESS_TYPE’;ATTR_NAMELENGTH ATTR_TYPE_NAME-------------------------------------------------------------------CITY20VARCHAR2STREET 30 VARCHAR2ZIPNUMBER對象類型信息息查看類方法定定義selecttype_name,method_namefromuser_type_methods;TYPE_NAMEMETHOD_NAME-----------------------------------------------ADDRESS_TYPEADDRESS_ORDEREMPLOYEE_TYPEDAYS_AT_COMPANYEMPLOYEE_TYPEMONTH_AT_COMPANYEMPLOYEE_TYPEEMP_ORDERNAME_TYPENAME_MAP對象類型相關關性在對象和對象象類型之間存存在相關樹。。必須保證樹樹的完整。不不允許破壞被被引用的類型型。例如:droptypename_type;當類型已被引用用時不讓刪droptypename_typeforce;強行刪除,再再查使用該類類型定義的表表時出錯。name_typeaddress_type對象類型相關關性workercust_typeCustemployee_typeemployeesordersgoodsgoods_typeorder_type查看對象相相關性例:selectname,type,referenced_nameRname,referenced_typeRtypefromuser_dependencieswherename=‘ORDERS’;NAMETYPERNAMERTYPE-------------------------------------------------------------------------ORDERSTABLESTANDARDPACKAGEORDERSTABLECUST_TYPETYPEORDERSTABLEORDER_TYPETYPE查看對象相相關性例:=‘‘CUST’nametypeRnameRtype---------------------------------------------------------------------------------------------------------------CUSTTABLESTANDARDPACKAGECUSTTABLENAME_TYPETYPECUSTTABLEADDRESS_TYPETYPECUSTTABLECUST_TYPETYPE例:select…referenced_name=‘cust_type’’;查看哪些對對象使用了了cust_type類型。查看對象相相關性例:=‘‘CUST_TYPE’;nametypeRnameRtype-------------------------------------------------------------------------CUST_TYPETYPESTANDARDPACKAGECUST_TYPETYPENAME_TYPETYPECUST_TYPETYPEADDRESS_TYPETYPE列出依賴樹樹:執(zhí)行oracle根目錄/rdbms/admin/utldtree.sql生成兩個視視圖deptree和ideptree程序視圖顯顯示依賴樹樹。小結—對象象屬性和方方法當使用表的的當前行對對象時,對對象屬性和和方法的引引用必須使使用表的別別名,而不不能是實際際的表名selectc.address.city,.first_name='王';selecte.days_at_company()fromemployeesewheree.empno=3;小結—列對對象與行對對象列對象:嵌嵌入型對象象,作為表表中的列來來處理的對對象,要通通過主表才才能訪問。。自定義復合合數(shù)據(jù)類型型可變數(shù)組嵌套表行對象:不不是嵌入型型對象,而而是引用型型對象,可可以通過其其他對象的的引用(ref)來訪問。列對象沒有有OID,而且不能被被引用。列對象是基基于對數(shù)據(jù)據(jù)庫已有功功能的擴充充(自定義義類型)。。收集類型Oracle的數(shù)據(jù)類型型擴展收集類型實現(xiàn)一對多多關系的模模型化。在關系設計計中,只能能通過聯(lián)接接(JOIN)實現(xiàn)表的關關聯(lián),將將導致復雜雜的運算。。在對象設計計中,可以以通過收集集實現(xiàn)對象象類型的關關聯(lián)收集類型記錄數(shù)組表收集類型--可變數(shù)數(shù)組支持有序的的一對多的的關系??梢栽谝恍行兄写鎯δ衬硞€記錄的的重復屬性性??勺儯付〝?shù)組組最大容量量。數(shù)組元素具具有相同類類型,可以以是基本本類型、REF或?qū)ο箢愋托?。但不能能是嵌套表表或可變?shù)數(shù)組類型。。不能是VARRAYOFLOB類型book數(shù)據(jù)結構分析化學相關圖Book_list_type(varray(5)ofvarchar2(10)borrower_type(sno,sname,class,books)borrower使用數(shù)組類類型定義數(shù)組類類型CREATETYPEbook_list_typeASVARRAY(5)OFVARCHAR2(10);建借閱者表表的類型CREATETYPEborrower_typeASOBJECT(snoNUMBER(6),sname VARCHAR2(10),class VARCHAR2(10),books book_list_type,MEMBERFUNCTIONadd_book(bookVARCHAR2)RETURNbook_list_type,PRAGMArestrict_references(add_book,WNDS));在方法中處處理數(shù)組類類型數(shù)據(jù)實現(xiàn)類方法法CREATETYPEBODYborrower_typeASMEMBERFUNCTIONadd_book(bookvarchar2)RETURNbook_list_typeIStemp_arraybook_list_type;counterINTEGER;BEGINtemp_array:=SELF.books;counter:=temp_array.COUNT+1;temp_array.EXTEND;temp_array(counter):=book;RETURNtemp_array;END;END;建含有數(shù)組組的對象表表CREATETABLEborrowerOFborrower_type;收集類型--收集的的方法收集(collection)的方法:內(nèi)內(nèi)置的函函數(shù)和過程程函數(shù)方法::EXISTS(n)當收集類型型中指定元元素存在為為“真”COUNT返回當前收收集類型中中的元素個個數(shù)。LIMIT返回可變數(shù)數(shù)組元素個個數(shù)的上限限值FIRSTandLAST返回收集中中第一個和和最后一個個元素的下下標。((對于可變變數(shù)組,總總是返回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個元元素素delete(m,n)刪除除收收集集中中第第m~n個元元素素收集集類類型型--可可變變數(shù)數(shù)組組插入入數(shù)數(shù)據(jù)據(jù)INSERTINTOborrowerVALUES(980001,‘‘李星星’’,‘‘力力01’’,book_list_type(‘‘數(shù)據(jù)據(jù)結結構構’’,‘‘大大學學物物理理’’));INSERTINTOborrowerVALUES(970025,‘‘王辰辰’’,‘‘化化91’’,book_list_type(‘‘計算算方方法法’’,‘‘分分析析化化學學’’));修改改數(shù)數(shù)據(jù)據(jù)((增增加加一一本本書書))UPDATEborrowerbSETb.books=b.add_book('物理理習習題題集集')WHEREb.sno=980001;包含含可可變變數(shù)數(shù)組組列列的的查查詢詢查詢詢::selectsname,booksfromborrower;SNAMEBOOKS---------------------------------------------------------------------------李星星BOOK_LIST_TYPE('數(shù)據(jù)據(jù)結結構構','物物理理習習題題集集')王辰辰BOOK_LIST_TYPE(‘‘計算算方方法法’’,‘‘分分析析化化學學’’)查數(shù)數(shù)組組元元素素??selectb.sname,b.class,b.books(2)fromborrowerb錯誤誤位位于于第第1行行::*ORA-00904:非法法的的列列名名可變變數(shù)數(shù)組組的的操操作作對數(shù)數(shù)組組元元素素的的檢檢索索不不能能簡簡單單地地用用select語句句,,而而應應在在PL/SQL里用用有有關關方方法法和和循循環(huán)環(huán)結結構構查查詢詢。。declarecursorc1isselect*fromborrower;beginforrinc1loopdbms_output.put_line(’’borrowername’’||r.sname);foriin1..r.books.countloopdbms_output.put_line(r.books(i));endloop;endloop;end;收集集類類型型方方法法例例在方方法法中中直直接接修修改改數(shù)數(shù)據(jù)據(jù)庫庫MEMBERPROCEDUREdel_book(bookvarchar2)ISold_booksbook_list_type;new_booksbook_list_type;iinteger:=1;jinteger;BEGINold_books:=SELF.books;new_books:=book_list_type();--初始化化一個個數(shù)組組收集類類型方方法例例WHILEi<=old_books.COUNT()LOOPIFold_books(i)=bookTHENi:=i+1;ELSEnew_books.EXTEND(1);j:=new_books.COUNT();new_books(j):=old_books(i);i:=i+1;ENDIF;ENDLOOP;UPDATEBORROWERSETbooks=new_booksWHEREsno=SELF.sno;END;END;/調(diào)用方方法declareb_objborrower_type;beginselectvalue(b)intob_objfromborrowerbwheresno=980001;b_obj.del_book('數(shù)據(jù)結結構');--調(diào)用還還書方方法end;收集類類型方方法例例還能借借幾本本MEMBERFUNCTIONbnum_bookRETURNnumberIStemp_arraybook_list_type;BEGINtemp_ar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 甜品課程設計中班下冊
- 電機主極端板課程設計
- 2024年度農(nóng)產(chǎn)品收購與品牌推廣合作協(xié)議3篇
- 空調(diào)課程設計模板
- 知識競賽搶答器課程設計
- 數(shù)邏課程設計
- 研學德育課程設計
- 電氣設備行業(yè)營銷實戰(zhàn)考核試卷
- 拉緊裝置課程設計
- 夾具課程設計杠桿
- 狼王夢-完整課件
- 2024解讀《弘揚教育家精神》全文
- DB3305-T 46-2018美麗公路建設規(guī)范
- TCCIAT 0046-2022 混凝土剪力墻結構裝配式組合殼體系技術規(guī)程
- GB/Z 44118.1-2024電能質(zhì)量技術管理第1部分:總則
- 小區(qū)物業(yè)續(xù)聘方案
- 新疆喀什地區(qū)2024屆九年級下學期中考三模數(shù)學試卷(含解析)
- 高脂血癥性胰腺炎的治療與護理
- 個人推廣費合同范本
- 2024年浙江省嘉興市交通運輸局所屬事業(yè)單位招聘人才5人歷年(高頻重點提升專題訓練)共500題附帶答案詳解
- AQ/T 2061-2018 金屬非金屬地下礦山防治水安全技術規(guī)范(正式版)
評論
0/150
提交評論