Oracle 對象關(guān)系數(shù)據(jù)庫_第1頁
Oracle 對象關(guān)系數(shù)據(jù)庫_第2頁
Oracle 對象關(guān)系數(shù)據(jù)庫_第3頁
Oracle 對象關(guān)系數(shù)據(jù)庫_第4頁
Oracle 對象關(guān)系數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Oracle8對象關(guān)系數(shù)據(jù)庫高端數(shù)據(jù)庫-提高DBMS管理上限Oracle8對象關(guān)系數(shù)據(jù)庫擴充的類型系統(tǒng)對象關(guān)系數(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ā)用戶多線程服務(wù)器(用少量的服務(wù)器端進程管理大量的客戶端用戶。Net8(SQL*net)連接管理器—連接池(TNS資源)、多路傳輸、應(yīng)用請求集中化更有效地使用網(wǎng)絡(luò)資源避免操作系統(tǒng)對服務(wù)器網(wǎng)絡(luò)連接數(shù)的限制客戶端(服務(wù)器)服務(wù)器一、高端數(shù)據(jù)庫-提高DBMS管理上限網(wǎng)絡(luò)層透明網(wǎng)絡(luò)底層協(xié)議適配器二、擴充的類型系統(tǒng)

-對象關(guān)系數(shù)據(jù)庫

關(guān)系模型與對象模型新的數(shù)據(jù)類型-對象(記錄)類型對象表—面向?qū)ο髷?shù)據(jù)庫設(shè)計收集類型(數(shù)組與嵌套表)

對象與視圖

數(shù)據(jù)庫新的應(yīng)用領(lǐng)域計算機輔助設(shè)計

CAD數(shù)據(jù)庫必須存儲和處理與工程設(shè)計相關(guān)的數(shù)據(jù)(產(chǎn)品部件及相互關(guān)系、設(shè)計版本…)計算機輔助軟件工程數(shù)據(jù)庫中存儲軟件開發(fā)人員用到的各種數(shù)據(jù),包括源代碼、模塊之間依賴關(guān)系、變量定義、文檔…多媒體數(shù)據(jù)庫聲音、視頻、圖象…辦公信息系統(tǒng)超文本數(shù)據(jù)庫應(yīng)用需要新的數(shù)據(jù)類型——論文檢索系統(tǒng)論文標(biāo)題作者列表(第一作者,第二作者,找出某人參與撰寫的所有論文…)檢索關(guān)鍵字發(fā)表日期(年月日分開)傳統(tǒng)關(guān)系數(shù)據(jù)庫的數(shù)據(jù)類型復(fù)雜屬性只能拆分成并列的單一屬性姓名,地址(省、市、區(qū)、街道、門牌號)本來是一個結(jié)合緊密的整體,在關(guān)系數(shù)據(jù)庫中卻只能拆成單一屬性,與其他屬性并列(如姓名、年齡等),沒有反映出它們的緊密關(guān)系。無法表示變長的屬性家庭記錄有幾個孩子長字段設(shè)幾個字段(不好估計)家庭編號戶主子女1子女2子女3…傳統(tǒng)關(guān)系數(shù)據(jù)庫的數(shù)據(jù)類型無法直接表示嵌套表例:一張發(fā)貨單,發(fā)三種貨物:放3條記錄,但公共信息存3遍(查詢方便)拆成兩張表(發(fā)貨單,發(fā)送貨物),需要連接,費時,且要清楚表與表的關(guān)系貨單號發(fā)貨人貨物日期…發(fā)往地貨物名稱價格數(shù)量關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型數(shù)據(jù)模型是模型化數(shù)據(jù)和信息的工具。現(xiàn)實世界認識抽象信息世界-概念數(shù)據(jù)模型機器世界-DBMS支持的數(shù)據(jù)模型關(guān)系模型轉(zhuǎn)換數(shù)據(jù)模型演演變文件系統(tǒng)(OS)層次模型———網(wǎng)狀模模型——關(guān)關(guān)系模型(DB)特點:面向記錄,,信息由定定長記錄組組成。記錄簡單((短?。?。。原子字段,,字段不再再含有結(jié)構(gòu)構(gòu)。關(guān)系模型的的特點強調(diào)數(shù)據(jù)的的獨立性((以數(shù)據(jù)為為中心),,數(shù)據(jù)與程程序分離。。采用關(guān)系模模型、概念念單一,實實體和聯(lián)系系都是用關(guān)關(guān)系來表示示。關(guān)系必須是是規(guī)范化的的關(guān)系,要要求每一分分量不可再再分。支持關(guān)系語語言,具有有高度非過過程化,支支持集合運運算通過外來碼碼實現(xiàn)表的的連接(多多表查詢))Oracle8—擴擴充的類類型系統(tǒng)是對關(guān)系數(shù)數(shù)據(jù)模型進進行的擴充充。提供更為豐豐富的面向向?qū)ο蟮念愵愋拖到y(tǒng)。。擴充的類型型系統(tǒng)允許許元組的屬屬性值為復(fù)復(fù)雜類型,,在關(guān)系查查詢語言中中增加處理理新數(shù)據(jù)類類型的成分分。既保留關(guān)系系模型基礎(chǔ)礎(chǔ)又提高建模模能力對象關(guān)系模模型為希望望使用面向向?qū)ο筇卣髡鞯年P(guān)系數(shù)數(shù)據(jù)庫用戶戶提供可能能。面向?qū)ο蟮牡幕靖拍钅蠲嫦驅(qū)ο蠓椒椒ㄊ且砸鉀Q的問問題中所涉涉及到的各各種對象為為主要考慮慮因素。對象是一種種看問題的的觀點,是是對現(xiàn)實世世界各種元元素的一種種抽象。對對象既含數(shù)數(shù)據(jù)又含功功能,因此此具有自身身處理數(shù)據(jù)據(jù)的能力。。對象被認認為是迄今今為止最接接近真實事事物的數(shù)據(jù)據(jù)抽象?,F(xiàn)實世界中中對象有兩兩個共同的的特點:一方面,它它們都有自自己的狀態(tài)態(tài)。如一臺臺電視機有有自己的擺擺放位置,,有關(guān)機和和開機狀態(tài)態(tài),此刻正正在播放某某一頻道的的電視節(jié)目目等另一方面,,它們又都都有自己的的行為,如如電視機的的開機、關(guān)關(guān)機、調(diào)臺臺等。面向?qū)ο蟮牡幕靖拍钅顑?nèi)部實現(xiàn)(封裝)接口屬性、方法法能動的主體體使電腦貼近近人腦的思思維模式((減少人認認識問題時時的認識空空間和計算算機處理問問題時的方方法空間的的不一致性性)。實現(xiàn)軟件的的復(fù)用(軟軟件芯片))。對象的屬性性與方法面向?qū)ο蟪坛绦蛟O(shè)計中中的對象是是現(xiàn)實世界界對象的模模型化,它它同樣具有有狀態(tài)和行行為。對象的狀態(tài)態(tài)用屬性來來維護,對象的行為為用方法來來實現(xiàn)。因此可以簡簡單地講,,對象是面面向?qū)ο蟮牡某绦蛟O(shè)計計模式,它它由描述對對象狀態(tài)的的屬性(變變量)和用用來實現(xiàn)對對象行為的的方法(代代碼)組成成。對象與類相關(guān)對象的的集合稱為為類(Class)類是對象的的抽象及描描述,它是是具有統(tǒng)一一屬性和方方法的多個個對象的統(tǒng)統(tǒng)一描述體體,是用來來定義一組組對象共有有屬性和方方法的模板板。類是用來創(chuàng)創(chuàng)建對象實實例的樣板板,它包含含所創(chuàng)建對對象的狀態(tài)態(tài)描述和方方法的定義義。類是一一個型,而而對象則是是這個型的的一個實例例。類是靜態(tài)概概念,而對對象則是一一個動態(tài)概概念,因為為只有在運運行時才給給對象分配配空間,對對象才真正正存在。面向?qū)ο蟮牡臄?shù)據(jù)模型型在一些應(yīng)用用中,用戶戶將數(shù)據(jù)庫庫中的數(shù)據(jù)據(jù)看作是一一組對象而而非一組記記錄。面向?qū)ο蟮牡臄?shù)據(jù)模型型是面向?qū)ο蟪绦蛟O(shè)設(shè)計思想在在數(shù)據(jù)庫系系統(tǒng)中的應(yīng)應(yīng)用?;舅枷搿獙?shù)據(jù)和和操作這些些數(shù)據(jù)的程程序代碼封封裝在一個個對象里。。將一個對象象存儲在數(shù)數(shù)據(jù)庫中::對象的數(shù)據(jù)據(jù)部分必須須針對各個個對象分別別存儲。而實現(xiàn)類方方法的程序序代碼應(yīng)該該和類的定定義一起作作為數(shù)據(jù)庫庫模式的一一部分存儲儲。面向?qū)ο髷?shù)數(shù)據(jù)庫數(shù)據(jù)庫中不不是只存儲儲單純的數(shù)數(shù)據(jù),而是是存儲包含含屬性和方方法的對象象。對于一個數(shù)數(shù)據(jù)庫對象象,可定義義在其上運運行的過程程和函數(shù)。。使數(shù)據(jù)庫庫中的數(shù)據(jù)據(jù)和訪問該該數(shù)據(jù)的方方法聯(lián)系起起來,可標(biāo)標(biāo)準化數(shù)據(jù)據(jù)訪問的方方法并提高高對象的可可復(fù)用性。。應(yīng)用邏輯從從應(yīng)用程序序中移動到到數(shù)據(jù)庫中中(對象方方法)創(chuàng)建通用的的數(shù)據(jù)庫對對象,并能能成為數(shù)據(jù)據(jù)庫對象的的標(biāo)準,可可實現(xiàn)數(shù)據(jù)據(jù)庫對象的的重用。數(shù)據(jù)模型現(xiàn)實世界認識抽象信息世界--概念數(shù)據(jù)據(jù)模型機器世界--DBMS支持的數(shù)據(jù)據(jù)模型對象模型轉(zhuǎn)換對象模型與與關(guān)系模型型對象模型對象類型的的屬性描述述對象類型的的方法封裝裝了操作該該對象的代代碼。提供供了處理數(shù)數(shù)據(jù)庫中數(shù)數(shù)據(jù)的界面面。關(guān)系模型二維表中列列的定義沒有方法另編程可使用操作作某數(shù)據(jù)庫庫表的存儲儲過程。面向?qū)ο髷?shù)數(shù)據(jù)模型中中的類概念念—實體集集概念。面向?qū)ο髷?shù)數(shù)據(jù)模型中中的對象概概念—實體體概念對象模型與與關(guān)系模型型關(guān)系模型可可用二維表表來表示———關(guān)關(guān)系表:屬性—二二維表表的列元組—二二維表表的行對象模型可可用二維表表來表示———對對象表:用一個類類(對象類類型)定義義一個對象象表類的屬性——二維維表的列對象(類的的實例)——二二維表的的行(行對對象)通過對象調(diào)調(diào)用對象方方法。Oracle的擴充充類型Oracle是一個開放放的類型系系統(tǒng),增加加了復(fù)雜的的數(shù)據(jù)類型型以及用戶戶自定義類類型用戶定義義的數(shù)據(jù)據(jù)類型使使得可以以在數(shù)據(jù)據(jù)庫中為為現(xiàn)實世世界的對對象建模模對象類型型(記錄錄類型))數(shù)組類型型嵌套表類類型創(chuàng)建對象象表,實實現(xiàn)面向向?qū)ο蟮牡臄?shù)據(jù)庫庫設(shè)計((而非關(guān)關(guān)系型數(shù)數(shù)據(jù)庫設(shè)設(shè)計。應(yīng)用邏輯輯從應(yīng)用用程序中中移動到到數(shù)據(jù)庫庫中(對對象方法法)擴充類型型的不同同應(yīng)用對象類型型數(shù)數(shù)組類型型嵌嵌套表類類型關(guān)系表對對象表對象類型利用對象象類型定定義復(fù)復(fù)合數(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ù)據(jù)的的操作使用對象類型型聲明了關(guān)系表中的列,DML語句必須須用一些些特殊的的語法插入新記記錄時,,對于對對象類型型的列,,要使用用構(gòu)造函函數(shù)構(gòu)造造出對應(yīng)應(yīng)類型的的數(shù)據(jù)。。構(gòu)造函數(shù)數(shù)是對象象類型的的特殊方方法,利利用此方方法為該該類型創(chuàng)創(chuàng)建對象象。構(gòu)造造方法的的名稱與與對象類類型(類類)同名名。對記錄型型數(shù)據(jù)的的分量進進行操作作時,要要使用““別名””對象類型型數(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ù)據(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ù)據(jù)的的查詢查詢語句句3((用別別名)selectwid顧客編號號,城市,街道,郵編fromworkerw;顧客編號號城城市市街街道道郵郵編編-------------------------------------------------1北北京白白頤路5號1000842天天津康康寧里20號3000723上上海南南京路23號200092查詢語句句4(別名名的使用用)select*對象類型型數(shù)據(jù)的的操作修改updateworkerwsetw.address.zip=100083wherewid=1;刪除deletefromworkerwherewid=1;.first_name=‘‘王’;修改表結(jié)結(jié)構(gòu)altertablecustadd(address1address_type);不能對表表修改自定義的的數(shù)據(jù)類類型格式式用戶自定定義數(shù)據(jù)據(jù)類型對象類型型更加貼貼近現(xiàn)實實世界的的數(shù)據(jù)特特征。使用對象象類型可可以更加加統(tǒng)一、、自然地地聲明和和操作表表中的數(shù)數(shù)據(jù)(在整個數(shù)數(shù)據(jù)庫中中地址一一致性))創(chuàng)建可為為大家引引用的新新數(shù)據(jù)類類型:創(chuàng)建一個個模式(如pub)建立公共共對象類類型(新新數(shù)據(jù)類類型)設(shè)置必要要的權(quán)限限使用CREATEPROCEDUREnew_worker(widNUMBER,_type,addresspub.address_type)自定義數(shù)據(jù)類類型上的索引引createindexaaaonworker(wname);ORA-02327:無法在具有數(shù)數(shù)據(jù)類型ADT的列上創(chuàng)建索索引。(即使在name_type類中定義了排排序方法也不不可以)如經(jīng)常進行如如下查詢:selectwid顧客編號,城市,街道,郵編fromworkerwwherew.address.zip=100084;可建索引如下下:createindexI_ziponworker(address.zip);使用對象表——面面向?qū)ο髷?shù)據(jù)據(jù)庫設(shè)計建立對象表的的類建類型(對象象類型聲明))createtype類型名asobject(屬性名1類類型說明,,屬性名2類類型說明,,…...memberfunction函數(shù)名(參參數(shù)說明)return返回類型,memberprocedure過程名(參數(shù)數(shù)說明),…);方法說明屬性說明對象屬性類型型對象類型必須須包含一個或或多個屬性,屬性的類型型可以是:Oracle的原始數(shù)據(jù)類類型、LOB對象對象的引用((REF)收集(COLLECTION))等對象方法方法是一個過過程或函數(shù),是對象類類型定義的一一部分,是程程序員編寫的的用于操縱對對象屬性的子子程序,被封封裝在對象類類型中。方法的種類::成員方法(member)構(gòu)造方法(constructor)MAP或ORDER方法(排序方方法)一個類可以有有多個方法((也可以不定定義方法)對象類型不存存儲數(shù)據(jù);必必須創(chuàng)建相應(yīng)應(yīng)的表來存儲儲數(shù)據(jù)編寫方法代碼碼建類型體(實實現(xiàn)類成員方方法)createtypebody類型名ASmemberfunction函數(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(empnoNUMBER(3),enameVARCHAR2(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ù)或過過程時,可可以使用PRAGMA編譯指令通知知PL/SQL編譯器禁止某某方法對數(shù)據(jù)據(jù)庫表和包中中的變量讀寫寫,當(dāng)方法法體中出現(xiàn)違違反情況時,編譯出錯錯。格式:PRAGMARESTRICT_REFERENCES(function_name,WNDS[,WNPS][,RNDS][,RNPS]);WNDS不允許寫數(shù)據(jù)據(jù)庫RNDS不允許讀數(shù)據(jù)據(jù)庫WNPS不允許改程序序包變量RNPS不允許引用程程序包變量對方法的限制制CREATEORREPLACETYPEemployee_typeASOBJECT(empnoNUMBER,enameVARCHAR2(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'違反了它的相相關(guān)編譯指令令對象類型--構(gòu)造子方法法Oracle自動地為每個個對象類型創(chuàng)創(chuàng)建一個構(gòu)造造方法。構(gòu)造子方法的的名稱采用對對象類型名。。構(gòu)造子方法的的參數(shù)即對象象類型的所有有屬性。構(gòu)造子方法初初始化一個對對象類型的實實例,并將將它的屬性賦賦值。例:insertintoemployeesvalues(employee_type(1,‘‘Jone’’,500,‘5-10月-1989’));對象表操作建表createtableemployeesofemployee_type;插入數(shù)據(jù)insertintoemployeesvalues(employee_type(1,‘Jone’,500,‘5-10月-1989’));insertintoemployees--省略構(gòu)造造方法values(1,‘‘Jone’’,1500,‘5-10月-1989’);insertintoemployeesvalues(2,'smith',700,‘10-5月-1997');insertintoemployeesvalues(3,‘‘king’’,900,’25-12月-2000’);獲取行對象——value函數(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)調(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_variable employee_type;days_employed number;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)境設(shè)設(shè)置執(zhí)行結(jié)果:Daysemployed:26PL/SQL輸出(利用包包過程)dbms_output.put_line(‘…’);環(huán)境設(shè)置execdbms_output.enablesetserveroutputon對象方法小結(jié)結(jié)對象類型總是是有1到多個個方法(構(gòu)造造方法是隱含含方法,成員員方法為0~n個。成員方法可以以帶輸入輸出出參數(shù)。每個成員方法法含有名為SELF的隱隱含第一參數(shù)數(shù),它具有與與對象類型自自身相同的類類型。定義函數(shù)方法法,如沒參數(shù)數(shù)不用寫括號號,但調(diào)用時時要寫括號。。定義方法形形參時,類型型不用寫長度度,如varchar2對象表的特性性對象表是只用用對象類型定定義的數(shù)據(jù)庫庫表,不含關(guān)關(guān)系型列。對象表的列對對應(yīng)(用來創(chuàng)創(chuàng)建表的)對對象類型的屬屬性。對象表的行是是表類型的對對象(實例),每一行都都有一個系統(tǒng)統(tǒng)分配的唯一一的對象標(biāo)識識符(OID)對象ID(OID)是每一個行對對象的唯一描描述符,是全全局唯一的,并且可以引引用OID不用于定位數(shù)數(shù)據(jù),ROWID仍用于定位數(shù)數(shù)據(jù)oracle通過對象引用用實現(xiàn)數(shù)據(jù)庫庫中不同對象象之間的聯(lián)系系(與關(guān)系表表完全不同))獲取對象引用用—ref函函數(shù)具有OID的對象實例可可以被引用(REF)ref(對象表的別名名)返回對象表實實例指針,即即行對象的引用。例:selectref(e)fromemployeese;REF(e)------------------------------------------------------------------------------------------------------------------------------------------------------------------000028020965D...0BEFE0340800209ADC5901403BE50000000028020965D...0BEFE0340800209ADC5901403BE50001000028020965D...0BEFE0340800209ADC5901403BE50002對象引用例建立對象表custCreatetypecust_typeasobject(custid number(5),namename_type,addressaddress_type);createtablecustofcust_type(custidprimarykey);對象引用例向cust表中插入數(shù)據(jù)據(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;.first_name=‘‘王’;修改cust表結(jié)構(gòu)構(gòu)???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)聯(lián)系,,對象象之間間連接接不再再需要要關(guān)系系表的的連接接(JOIN))操作。。將對象象表的的表別別名作作為REF的參數(shù)數(shù),可可以取取得對對應(yīng)OID的引用用值。。引用只只能用用于具具有OID的對象象。customerREFcust_typeSCOPEISCUSTSCOPE子句用用于限限定一一個引引用在在一個個指定定表中中,這這樣可可以提提高查查詢性性能,,并減減少存存儲指指針的的空間間。INSERTINTOordersSELECT1,ref(c),‘‘7-1月-2000’’,165,101FROMcustcWHEREcustid=1;UPDATEordersSETcustomer=(SELECTREF(c)FROMcustcWHEREcustid=2)WHEREorderid=1;引用類類型數(shù)數(shù)據(jù)的的操作作引用類類型數(shù)數(shù)據(jù)的的操作作SELECTcustomerFROMordersWHEREorderid=1;22020865F009D0AC262…42A35E0340800…顧客號號,名,orderdate日期FROMordersoWHEREorderid=1顧客號號名名日日期---------------------------2大年07-1月-00對象引引用——簡化化了代代碼數(shù)據(jù)庫庫管理理對象象間的的連系系,用用戶只只需通通過屬屬性進進行對對象的的引用用。在關(guān)系系設(shè)計計中,開開發(fā)人人員必必須使使用聯(lián)聯(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ù)據(jù)據(jù)類型型主要要為標(biāo)標(biāo)量數(shù)數(shù)據(jù)類類型::number,char,date標(biāo)量數(shù)數(shù)據(jù)類類型可可以排排序((如orderby……)排序在在SQL語句的的使用用:關(guān)系運運算((><=)between及in的判斷斷orderbygroupbydistinct子句句unique和primarykey約束束自定定義義數(shù)數(shù)據(jù)據(jù)類類型型如如何何排排序序selectwname,addressfromworkerorderbyaddress;錯誤誤位位于于第第2行行::ORA-22950:無法法ORDER沒有有MAP或ORDER方法法的的對對象象對象象類類型型的的排排序序方方法法同類類的的排排序序?qū)χеС殖钟糜脩魬舳ǘx義的的對對象象類類型型很很重重要要。。對象象類類型型由由于于結(jié)結(jié)構(gòu)構(gòu)復(fù)復(fù)雜雜,必必須須借借助助方方法法實實現(xiàn)現(xiàn)排排序序和和比比較較。。MAP方法法將將對對象象類類型型轉(zhuǎn)轉(zhuǎn)換換為為傳傳統(tǒng)統(tǒng)數(shù)數(shù)據(jù)據(jù)類類型型。。ORDER方法提供供排序規(guī)規(guī)則。比比較本對對象和另另一對象象實例,并返返回1,0,-1分別代表表大于、等等于、小小于。一個對象象類型只只能有一一個MAP方法或一一個ORDER方法:mapmemberfunction…ordermemberfunction……MAP方方法例例對象類型型---->標(biāo)標(biāo)量類類型方法返回回一個傳傳統(tǒng)數(shù)據(jù)據(jù)類型用用于排序序。沒有輸入入?yún)?shù)(只有一一個隱含含參數(shù)SELF)。方法被隱隱含調(diào)用用。在類型定定義中說說明MAP方法:CREATETYPEname_typeASOBJECT(first_namevarchar2(4),last_namevarchar2(4),MAPMEMBERFUNCTIONname_mapRETURNvarchar2);在類型體體中實現(xiàn)現(xiàn)MAP方法:CREATETYPEBODYname_typeASMAPMEMBERFUNCTIONname_mapRETURNvarchar2ISBEGINRETURNfirst_name||last_name;END;END;排序:FROMcustcORDERBYnamedesc;任何基于于name_type類型的的排序按按名稱的的拼接串串作為大大小比較較的依據(jù)據(jù)。MAP方方法例例MAP方方法隱含含調(diào)用ORDER方法決定類型型實例的的序列關(guān)關(guān)系。有一個參參數(shù)(外外加一個個隱含的的參數(shù)SELF)函數(shù)方法法返回一一個整數(shù)數(shù)如果對象象自身比比參數(shù)對對象小,返回回-1如果對象象自身與與參數(shù)對對象相等等,返返回0如果對象象自身比比參數(shù)對對象大,返回回1ORDER方法例1在類型定定義中聲聲明order方法:CREATEorreplaceTYPEaddress_typeASOBJECT(cityVARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6),ORDERMEMBERFUNCTIONaddress_order(other_addressaddress_type)RETURNINTEGER);在類型體體中實現(xiàn)現(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排序:_name姓,名,城市,郵編fromcustcorderbyc.addressdesc;排序結(jié)果果:姓名名城城市郵郵編------------------------------------------------王至至遠遠北北京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;/對象類型型信息與類型有有關(guān)的數(shù)數(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_NAMELENGTHATTR_TYPE_NAME-------------------------------------------------------------------CITY20VARCHAR2STREET30VARCHAR2ZIPNUMBER對象類類型信信息查看類類方法法定義義selecttype_name,method_namefromuser_type_methods;TYPE_NAMEMETHOD_NAME-----------------------------------------------ADDRESS_TYPEADDRESS_ORDEREMPLOYEE_TYPEDAYS_AT_COMPANYEMPLOYEE_TYPEMONTH_AT_COMPANYEMPLOYEE_TYPEEMP_ORDERNAME_TYPENAME_MAP對象類類型相相關(guān)性性在對象象和對對象類類型之之間存存在相相關(guān)樹樹。必必須保保證樹樹的完完整。。不允允許破破壞被被引用用的類類型。。例如::droptypename_type;當(dāng)類型已已被引引用時時不讓讓刪droptypename_typeforce;強行刪刪除,,再查查使用用該類類型定定義的的表時時出錯錯。name_typeaddress_type對象類類型相相關(guān)性性workercust_typeCustemployee_typeemployeesordersgoodsgoods_typeorder_type查看對對象相相關(guān)性性例:selectname,type,referenced_nameRname,referenced_typeRtypefromuser_dependencieswherename=‘ORDERS’’;NAMETYPERNAMERTYPE-------------------------------------------------------------------------ORDERSTABLESTANDARDPACKAGEORDERSTABLECUST_TYPETYPEORDERSTABLEORDER_TYPETYPE查看對對象相相關(guān)性性例:=‘‘CUST’nametypeRnameRtype---------------------------------------------------------------------------------------------------------------CUSTTABLESTANDARDPACKAGECUSTTABLENAME_TYPETYPECUSTTABLEADDRESS_TYPETYPECUSTTABLECUST_TYPETYPE例:select……referenced_name=‘‘cust_type’’;查看哪哪些對對象使使用了了cust_type類型。。查看對對象相相關(guān)性性例:=‘‘CUST_TYPE’’;nametypeRnameRtype-------------------------------------------------------------------------CUST_TYPETYPESTANDARDPACKAGECUST_TYPETYPENAME_TYPETYPECUST_TYPETYPEADDRESS_TYPETYPE列出依依賴樹樹:執(zhí)行oracle根目錄錄/rdbms/admin/utldtree.sql生成兩兩個視視圖deptree和ideptree程序視視圖顯顯示依依賴樹樹。小結(jié)——對象象屬性性和方方法當(dāng)使用用表的的當(dāng)前前行對對象時時,對對象屬屬性和和方法法的引引用必必須使使用表表的別別名,,而不不能是是實際際的表表名.first_name='王';selecte.days_at_company()fromemployeesewheree.empno=3;小結(jié)——列對對象與與行對對象列對象象:嵌嵌入型型對象象,作作為表表中的的列來來處理理的對對象,,要通通過主主表才才能訪訪問。。自定義義復(fù)合合數(shù)據(jù)據(jù)類型型可變數(shù)數(shù)組嵌套表表行對象象:不不是嵌嵌入型型對象象,而而是引引用型型對象象,可可以通通過其其他對對象的的引用用(ref)來訪問問。列對象象沒有有OID,而且不不能被被引用用。列對象象是基基于對對數(shù)據(jù)據(jù)庫已已有功功能的的擴充充(自自定義義類型型)。。收集類類型Oracle的數(shù)據(jù)據(jù)類型型擴展展收集類類型實現(xiàn)一一對多多關(guān)系系的模模型化化。在關(guān)系系設(shè)計計中,,只能能通過過聯(lián)接接(JOIN)實現(xiàn)表表的關(guān)關(guān)聯(lián),將將導(dǎo)致致復(fù)雜雜的運運算。。在對象象設(shè)計計中,,可以以通過過收集集實現(xiàn)現(xiàn)對象象類型型的關(guān)關(guān)聯(lián)收集類類型記錄數(shù)組表收集類類型--可可變數(shù)數(shù)組支持有有序的的一對對多的的關(guān)系系??梢栽谠谝恍行兄写娲鎯δ衬硞€記記錄的的重復(fù)復(fù)屬性性??勺?,,但要要指定定數(shù)組組最大大容量量。數(shù)組元元素具具有相相同類類型,,可以以是基基本本類型型、REF或?qū)ο笙箢愋托?。但但不能能是嵌嵌套表表或可可變?shù)數(shù)組類類型。。不能是是VARRAYOFLOB類型book數(shù)據(jù)結(jié)結(jié)構(gòu)分析化化學(xué)相關(guān)圖圖Book_list_type(varray(5)ofvarchar2(10)borrower_type(sno,sname,class,books)borrower使用數(shù)數(shù)組類類型定義數(shù)數(shù)組類類型CREATETYPEbook_list_typeASVARRAY(5)OFVARCHAR2(10);建借閱閱者表表的類類型CREATETYPEborrower_typeASOBJECT(snoNUMBER(6),snameVARCHAR2(10),classVARCHAR2(10),booksbook_list_type,MEMBERFUNCTIONadd_book(bookVARCHAR2)RETURNbook_list_type,PRAGMArestrict_references(add_book,WNDS));在方法法中處處理數(shù)數(shù)組類類型數(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)當(dāng)收集集類型型中指指定元元素存存在為為“真真”COUNT返回當(dāng)當(dāng)前收收集類類型中中的元元素個個數(shù)。。LIMIT返回可可變數(shù)數(shù)組元元素個個數(shù)的的上限限值FIRSTandLAST返回收收集中中第一一個和和最后后一個個元素素的下下標(biāo)。。((對于于可變變數(shù)組組,總總是返返回1和count)PRIOR(n)andNEXT(n)返回指指定元元素的的前一一個和和后一一個元元素的的下標(biāo)標(biāo)。收集類類型--收收集的的方法法過程方方法::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ù)INSERTINTOborrowerVALUES(980001,‘‘李星’’,‘‘力01’’,book_list_type(‘‘?dāng)?shù)據(jù)結(jié)結(jié)構(gòu)’’,‘‘大學(xué)學(xué)物理理’));INSERTINTOborrowerVALUES(970025,‘‘王辰’’,‘‘化91’’,book_list_type(‘‘計算方方法’’,‘‘分析析化學(xué)學(xué)’));修改數(shù)數(shù)據(jù)((增加加一本本書))UPDATEborrowerbSETb.books=b.add_book('物理習(xí)習(xí)題集集')WHEREb.sno=980001;包含含可可變變數(shù)數(shù)組組列列的的查查詢詢查詢詢::selectsname,booksfromborrower;SNAMEBOOKS---------------------------------------------------------------------------李星星BOOK_LIST_TYPE('數(shù)據(jù)據(jù)結(jié)結(jié)構(gòu)構(gòu)','物物理理習(xí)習(xí)題題集集')王辰辰BOOK_LIST_TYPE(‘‘計算算方方法法’’,‘‘分分析析化化學(xué)學(xué)’’)查數(shù)數(shù)組組元元素素??selectb.sname,b.class,b.books(2)fromborrowerb錯誤誤位位于于第第1行行::*ORA-00904:非法法的的列列名名可變變數(shù)數(shù)組組的的操操作作對數(shù)數(shù)組組元元素素的的檢檢索索不不能能簡簡單單地地用用select語句句,,而而應(yīng)應(yīng)在在PL/SQL里用用有有關(guān)關(guān)方方法法和和循循環(huán)環(huán)結(jié)結(jié)構(gòu)構(gòu)查查詢詢。。declarecursorc1isselect*fromborrower;beginforrinc1loopdbms_output.put_line(’’borrowername’’||r.sname);loopdbms_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ù)數(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ù)據(jù)結(jié)結(jié)構(gòu)構(gòu)');--調(diào)用用還還書書方方法法end;收集集類類型型方方法法例例還能能借借幾幾本本MEMBERFUNCTIONbnum_bookRETURNnumberIStemp_arraybook_list_type;BEGINtemp_array:=SELF.books;RETURNtemp_array.limit-temp_array.count;END;查詢詢可可再再借借幾幾本本書書selectb.bnum_book()fromborrowerbwheresno=980001;-----------------------------3收集集類類型型方方法法例例MEMBERPROCEDUREclear_bookISBEGINSELF.books.delete;UPDATEborrowerSETbooks=SELF.booksWHEREsno=SELF.sno;END;收集集類類型型-嵌嵌套套表表嵌套套表表是是包包含含在在其其它它表表((主主表表))中中的的表表。。嵌套套表表中中的的列列類類型型:基基本本類類型型或或?qū)ο笙箢愵愋托?。。嵌套套表表在在主主表表中中作作為為列列值值。。對嵌嵌套套表表的的操操作作,,首首先先要要定定位位它它——主主表表中中某某個個記記錄錄的的嵌嵌套套表表列列的的值值。。物理理上上嵌嵌套套表表與與主主表表分分開開存存放放,,用用另另外外一一個個表表存存儲儲主主表表的的一一個個嵌嵌套套表表列列。。該該表表的的存存儲儲參參數(shù)數(shù)可可以以單單獨獨設(shè)設(shè)置置對象象相相關(guān)關(guān)性性Book_tBook_nt_treaderBook_array_treader1booklist收集集類類型型--嵌嵌套套表表建立立數(shù)數(shù)據(jù)據(jù)類類型型,,該該類類型型將將作作為為嵌嵌套套表表的的結(jié)結(jié)構(gòu)構(gòu)類類型型CREATETYPEbook_tASOBJECT(bnochar(4),bnameVARCHAR2(10),r

溫馨提示

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

評論

0/150

提交評論