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

下載本文檔

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

文檔簡介

Oracle8對(duì)象關(guān)系數(shù)據(jù)庫高端數(shù)據(jù)庫-提高DBMS管理上限Oracle8對(duì)象關(guān)系數(shù)據(jù)庫擴(kuò)充的類型系統(tǒng)對(duì)象關(guān)系數(shù)據(jù)庫Oracle8數(shù)據(jù)庫系統(tǒng)

一、高端數(shù)據(jù)庫-提高DBMS管理上限

oracle7 oracle8

數(shù)據(jù)庫大小 32TB 512KTB 數(shù)據(jù)文件個(gè)數(shù) 1-4K 64-256M每表包含列 數(shù) 254 1000 每表的LOB列數(shù) 1long 1000 CHAR長度 254 2000VARCHAR長度 2000 4000索引列數(shù) 16 32 支持上萬個(gè)并發(fā)用戶多線程服務(wù)器(用少量的服務(wù)器端進(jìn)程管理大量的客戶端用戶。Net8(SQL*net)連接管理器—連接池(TNS資源)、多路傳輸、應(yīng)用請(qǐng)求集中化更有效地使用網(wǎng)絡(luò)資源避免操作系統(tǒng)對(duì)服務(wù)器網(wǎng)絡(luò)連接數(shù)的限制客戶端(服務(wù)器)服務(wù)器一、高端數(shù)據(jù)庫-提高DBMS管理上限網(wǎng)絡(luò)層透明網(wǎng)絡(luò)底層協(xié)議適配器二、擴(kuò)充的類型系統(tǒng)

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

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

對(duì)象與視圖

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

CAD數(shù)據(jù)庫必須存儲(chǔ)和處理與工程設(shè)計(jì)相關(guān)的數(shù)據(jù)(產(chǎn)品部件及相互關(guān)系、設(shè)計(jì)版本…)計(jì)算機(jī)輔助軟件工程數(shù)據(jù)庫中存儲(chǔ)軟件開發(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ū)、街道、門牌號(hào))本來是一個(gè)結(jié)合緊密的整體,在關(guān)系數(shù)據(jù)庫中卻只能拆成單一屬性,與其他屬性并列(如姓名、年齡等),沒有反映出它們的緊密關(guān)系。無法表示變長的屬性家庭記錄有幾個(gè)孩子長字段設(shè)幾個(gè)字段(不好估計(jì))家庭編號(hào)戶主子女1子女2子女3…傳統(tǒng)關(guān)系數(shù)據(jù)庫的數(shù)據(jù)類型無法直接表示嵌套表例:一張發(fā)貨單,發(fā)三種貨物:放3條記錄,但公共信息存3遍(查詢方便)拆成兩張表(發(fā)貨單,發(fā)送貨物),需要連接,費(fèi)時(shí),且要清楚表與表的關(guān)系貨單號(hào)發(fā)貨人貨物日期…發(fā)往地貨物名稱價(jià)格數(shù)量關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型數(shù)據(jù)模型是模型化數(shù)據(jù)和信息的工具?,F(xiàn)實(shí)世界認(rèn)識(shí)抽象信息世界-概念數(shù)據(jù)模型機(jī)器世界-DBMS支持的數(shù)據(jù)模型關(guān)系模型轉(zhuǎn)換數(shù)據(jù)模型型演變文件系統(tǒng)統(tǒng)(OS)層次模型型——網(wǎng)網(wǎng)狀模型型——關(guān)關(guān)系模型型(DB)特點(diǎn):面向記錄錄,信息息由定長長記錄組組成。記錄簡單單(短小?。?。原子字段段,字段段不再含含有結(jié)構(gòu)構(gòu)。關(guān)系模型型的特點(diǎn)點(diǎn)強(qiáng)調(diào)數(shù)據(jù)據(jù)的獨(dú)立立性(以以數(shù)據(jù)為為中心)),數(shù)據(jù)據(jù)與程序序分離。。采用關(guān)系系模型、、概念單單一,實(shí)實(shí)體和聯(lián)聯(lián)系都是是用關(guān)系系來表示示。關(guān)系必須須是規(guī)范范化的關(guān)關(guān)系,要要求每一一分量不不可再分分。支持關(guān)系系語言,,具有高高度非過過程化,,支持集集合運(yùn)算算通過外來來碼實(shí)現(xiàn)現(xiàn)表的連連接(多多表查詢?cè)儯㎡racle8—擴(kuò)擴(kuò)充的類類型系統(tǒng)統(tǒng)是對(duì)關(guān)系系數(shù)據(jù)模模型進(jìn)行行的擴(kuò)充充。提供更為為豐富的的面向?qū)?duì)象的類類型系統(tǒng)統(tǒng)。擴(kuò)充的類類型系統(tǒng)統(tǒng)允許元元組的屬屬性值為為復(fù)雜類類型,在在關(guān)系查查詢語言言中增加加處理新新數(shù)據(jù)類類型的成成分。既保留關(guān)關(guān)系模型型基礎(chǔ)又提高建建模能力力對(duì)象關(guān)系系模型為為希望使使用面向向?qū)ο筇靥卣鞯年P(guān)關(guān)系數(shù)據(jù)據(jù)庫用戶戶提供可可能。面向?qū)ο笙蟮幕颈靖拍蠲嫦驅(qū)ο笙蠓椒ㄊ鞘且砸饨鉀Q的問問題中所所涉及到到的各種種對(duì)象為為主要考考慮因素素。對(duì)象是一一種看問問題的觀觀點(diǎn),是是對(duì)現(xiàn)實(shí)實(shí)世界各各種元素素的一種種抽象。。對(duì)象既既含數(shù)據(jù)據(jù)又含功功能,因因此具有有自身處處理數(shù)據(jù)據(jù)的能力力。對(duì)象象被認(rèn)為為是迄今今為止最最接近真真實(shí)事物物的數(shù)據(jù)據(jù)抽象?!,F(xiàn)實(shí)世界界中對(duì)象象有兩個(gè)個(gè)共同的的特點(diǎn)::一方面,,它們都都有自己己的狀態(tài)態(tài)。如一一臺(tái)電視視機(jī)有自自己的擺擺放位置置,有關(guān)關(guān)機(jī)和開開機(jī)狀態(tài)態(tài),此刻刻正在播播放某一一頻道的的電視節(jié)節(jié)目等另一方面面,它們們又都有有自己的的行為,,如電視視機(jī)的開開機(jī)、關(guān)關(guān)機(jī)、調(diào)調(diào)臺(tái)等。。面向?qū)ο笙蟮幕颈靖拍顑?nèi)部實(shí)現(xiàn)現(xiàn)(封裝))接口屬性、方方法能動(dòng)的主主體使電腦貼貼近人腦腦的思維維模式((減少人人認(rèn)識(shí)問問題時(shí)的的認(rèn)識(shí)空空間和計(jì)計(jì)算機(jī)處處理問題題時(shí)的方方法空間間的不一一致性))。實(shí)現(xiàn)軟件件的復(fù)用用(軟件件芯片))。對(duì)象的屬屬性與方方法面向?qū)ο笙蟪绦蛟O(shè)設(shè)計(jì)中的的對(duì)象是是現(xiàn)實(shí)世世界對(duì)象象的模型型化,它它同樣具具有狀態(tài)態(tài)和行為為。對(duì)象的狀狀態(tài)用屬屬性來維維護(hù),對(duì)象的行行為用方方法來實(shí)實(shí)現(xiàn)。因此可以以簡單地地講,對(duì)對(duì)象是面面向?qū)ο笙蟮某绦蛐蛟O(shè)計(jì)模模式,它它由描述述對(duì)象狀狀態(tài)的屬屬性(變變量)和和用來實(shí)實(shí)現(xiàn)對(duì)象象行為的的方法((代碼))組成。。對(duì)象與類類相關(guān)對(duì)象象的集合合稱為類類(Class)類是對(duì)象象的抽象象及描述述,它是是具有統(tǒng)統(tǒng)一屬性性和方法法的多個(gè)個(gè)對(duì)象的的統(tǒng)一描描述體,,是用來來定義一一組對(duì)象象共有屬屬性和方方法的模模板。類是用來來創(chuàng)建對(duì)對(duì)象實(shí)例例的樣板板,它包包含所創(chuàng)創(chuàng)建對(duì)象象的狀態(tài)態(tài)描述和和方法的的定義。。類是一一個(gè)型,,而對(duì)象象則是這這個(gè)型的的一個(gè)實(shí)實(shí)例。類是靜態(tài)態(tài)概念,,而對(duì)象象則是一一個(gè)動(dòng)態(tài)態(tài)概念,,因?yàn)橹恢挥性谶\(yùn)運(yùn)行時(shí)才才給對(duì)象象分配空空間,對(duì)對(duì)象才真真正存在在。面向?qū)ο笙蟮臄?shù)據(jù)據(jù)模型在一些應(yīng)應(yīng)用中,,用戶將將數(shù)據(jù)庫庫中的數(shù)數(shù)據(jù)看作作是一組組對(duì)象而而非一組組記錄。。面向?qū)ο笙蟮臄?shù)據(jù)據(jù)模型是是面向?qū)?duì)象程序序設(shè)計(jì)思思想在數(shù)數(shù)據(jù)庫系系統(tǒng)中的的應(yīng)用。?;舅枷胂搿獙?shù)數(shù)據(jù)和操操作這些些數(shù)據(jù)的的程序代代碼封裝裝在一個(gè)個(gè)對(duì)象里里。將一個(gè)對(duì)對(duì)象存儲(chǔ)儲(chǔ)在數(shù)據(jù)據(jù)庫中::對(duì)象的數(shù)數(shù)據(jù)部分分必須針針對(duì)各個(gè)個(gè)對(duì)象分分別存儲(chǔ)儲(chǔ)。而實(shí)現(xiàn)類類方法的的程序代代碼應(yīng)該該和類的的定義一一起作為為數(shù)據(jù)庫庫模式的的一部分分存儲(chǔ)。。面向?qū)ο笙髷?shù)據(jù)庫庫數(shù)據(jù)庫中中不是只只存儲(chǔ)單單純的數(shù)數(shù)據(jù),而而是存儲(chǔ)儲(chǔ)包含屬屬性和方方法的對(duì)對(duì)象。對(duì)于一個(gè)個(gè)數(shù)據(jù)庫庫對(duì)象,,可定義義在其上上運(yùn)行的的過程和和函數(shù)。。使數(shù)據(jù)據(jù)庫中的的數(shù)據(jù)和和訪問該該數(shù)據(jù)的的方法聯(lián)聯(lián)系起來來,可標(biāo)標(biāo)準(zhǔn)化數(shù)數(shù)據(jù)訪問問的方法法并提高高對(duì)象的的可復(fù)用用性。應(yīng)用邏輯輯從應(yīng)用用程序中中移動(dòng)到到數(shù)據(jù)庫庫中(對(duì)對(duì)象方法法)創(chuàng)建通用用的數(shù)據(jù)據(jù)庫對(duì)象象,并能能成為數(shù)數(shù)據(jù)庫對(duì)對(duì)象的標(biāo)標(biāo)準(zhǔn),可可實(shí)現(xiàn)數(shù)數(shù)據(jù)庫對(duì)對(duì)象的重重用。數(shù)據(jù)模型型現(xiàn)實(shí)世界界認(rèn)識(shí)抽象信息世界界-概念念數(shù)據(jù)模模型機(jī)器世界界-DBMS支持的數(shù)數(shù)據(jù)模型對(duì)象模型型轉(zhuǎn)換對(duì)象模型型與關(guān)系系模型對(duì)象模型型對(duì)象類型型的屬性性描述對(duì)象類型型的方法法封裝了了操作該該對(duì)象的的代碼。。提供了了處理數(shù)數(shù)據(jù)庫中中數(shù)據(jù)的的界面。。關(guān)系模型型二維表中中列的定定義沒有方法法另編程可使用操操作某數(shù)數(shù)據(jù)庫表表的存儲(chǔ)儲(chǔ)過程。。面向?qū)ο笙髷?shù)據(jù)模模型中的的類概念念—實(shí)體體集概念念。面向?qū)ο笙髷?shù)據(jù)模模型中的的對(duì)象概概念—實(shí)實(shí)體概念念對(duì)象模型型與關(guān)系系模型關(guān)系模型型可用二二維表來來表示———關(guān)關(guān)系表表:屬性——二二維表的的列元組——二二維表的的行對(duì)象模型型可用二二維表來來表示———對(duì)對(duì)象表表:用一個(gè)類類(對(duì)對(duì)象類型型)定義義一個(gè)對(duì)對(duì)象表類的屬性性—二二維表表的列對(duì)象(類類的實(shí)例例)——二二維表表的行((行對(duì)象象)通過對(duì)象象調(diào)用對(duì)對(duì)象方法法。Oracle的的擴(kuò)充類類型Oracle是一個(gè)開開放的類類型系統(tǒng)統(tǒng),增加加了復(fù)雜雜的數(shù)據(jù)據(jù)類型以以及用戶戶自定義義類型用戶定義義的數(shù)據(jù)據(jù)類型使使得可以以在數(shù)據(jù)據(jù)庫中為為現(xiàn)實(shí)世世界的對(duì)對(duì)象建模模對(duì)象類型型(記錄錄類型))數(shù)組類型型嵌套表類類型創(chuàng)建對(duì)象象表,實(shí)實(shí)現(xiàn)面向向?qū)ο蟮牡臄?shù)據(jù)庫庫設(shè)計(jì)((而非關(guān)關(guān)系型數(shù)數(shù)據(jù)庫設(shè)設(shè)計(jì)。應(yīng)用邏輯輯從應(yīng)用用程序中中移動(dòng)到到數(shù)據(jù)庫庫中(對(duì)對(duì)象方法法)擴(kuò)充類型型的不同同應(yīng)用對(duì)象類型型數(shù)數(shù)組類型型嵌嵌套表類類型關(guān)系表對(duì)對(duì)象表對(duì)象類型利用對(duì)象象類型定定義復(fù)復(fù)合數(shù)據(jù)據(jù)類型用戶自定定義數(shù)據(jù)據(jù)類型使用對(duì)象象類型定定義一個(gè)個(gè)記錄數(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);對(duì)象類型數(shù)數(shù)據(jù)的操作作使用對(duì)象類型聲明了關(guān)系表中的列,DML語句必須用用一些特殊殊的語法插入新記錄錄時(shí),對(duì)于于對(duì)象類型型的列,要要使用構(gòu)造造函數(shù)構(gòu)造造出對(duì)應(yīng)類類型的數(shù)據(jù)據(jù)。構(gòu)造函數(shù)是是對(duì)象類型型的特殊方方法,利用用此方法為為該類型創(chuàng)創(chuàng)建對(duì)象。。構(gòu)造方法法的名稱與與對(duì)象類型型(類)同同名。對(duì)記錄型數(shù)數(shù)據(jù)的分量量進(jìn)行操作作時(shí),要使使用“別名名”對(duì)象類型數(shù)數(shù)據(jù)的操作作插入語句例例:insertintoworkervalues(1,name_type('王','至至遠(yuǎn)'),address_type('北京','白頤路5號(hào)',100084));insertintoworkervalues(2,name_type(‘張’,‘大大年'),address_type(‘天津’,‘‘康寧里20號(hào)’,300072));insertintoworkervalues(3,name_type('趙','力力平'),address_type('上海','南京路23號(hào)',200092));對(duì)象類型數(shù)數(shù)據(jù)的查詢?cè)儾樵冋Z句1select*fromworker;WIDNAME(FIRST_NAME,LAST_NAME)ADDRESS(CITY,STREET,ZIP)-----------------------------------------------------------------------------------------------------1NAME_TYPE(‘王’,‘‘至遠(yuǎn)’)ADDRESS_TYPE('北京','白頤路路5號(hào)',100084)2NAME_TYPE(‘張’,‘‘大年’)ADDRESS_TYPE(‘天津’,‘‘康寧里里20號(hào)’’,300072)3NAME_TYPE(‘趙’,‘‘力平’)ADDRESS_TYPE(‘上?!?‘‘南京路路23號(hào)’’,200092)查詢語句2selectwid,wnamefromworker;WIDNAME(FIRST_NAME,LAST_NAME)----------------------------------------------------------1NAME_TYPE(‘王’,‘‘至遠(yuǎn)’)2NAME_TYPE(‘張’,‘‘大年’)3NAME_TYPE(‘趙’,‘‘力平’)對(duì)象類型數(shù)數(shù)據(jù)的查詢?cè)儾樵冋Z句3(用用別名)selectwid顧客編號(hào),w.address.city城市,w.address.street街道,w.address.zip郵編fromworkerw;顧客編號(hào)城城市街街道道郵郵編-------------------------------------------------1北北京京白白頤路5號(hào)1000842天天津津康康寧里20號(hào)3000723上上海海南南京路23號(hào)200092查詢語句4(別名的的使用)select*fromworkerworderbyw.address.zip對(duì)象類型數(shù)數(shù)據(jù)的操作作修改updateworkerwsetw.address.zip=100083wherewid=1;刪除deletefromworkerwherewid=1;.first_name=‘‘王’;修改表結(jié)構(gòu)構(gòu)altertablecustadd(address1address_type);不能對(duì)表修修改自定義的數(shù)數(shù)據(jù)類型格格式用戶自定義義數(shù)據(jù)類型型對(duì)象類型更更加貼近現(xiàn)現(xiàn)實(shí)世界的的數(shù)據(jù)特征征。使用對(duì)象類類型可以更更加統(tǒng)一、、自然地聲聲明和操作作表中的數(shù)數(shù)據(jù)(在整個(gè)數(shù)據(jù)據(jù)庫中地址址一致性))創(chuàng)建可為大大家引用的的新數(shù)據(jù)類類型:創(chuàng)建一個(gè)模模式(如pub)建立公共對(duì)對(duì)象類型((新數(shù)據(jù)類類型)設(shè)置必要的的權(quán)限使用CREATEPROCEDUREnew_worker(widNUMBER,_type,addresspub.address_type)自定義數(shù)據(jù)據(jù)類型上的的索引createindexaaaonworker(wname);ORA-02327:無法在具有有數(shù)據(jù)類型型ADT的列上創(chuàng)建建索引。(即使在name_type類中定義了了排序方法法也不可以以)如經(jīng)常進(jìn)行行如下查詢?cè)儯簊electwid顧客編號(hào),w.address.city城市,w.address.street街道,w.address.zip郵編fromworkerwwherew.address.zip=100084;可建索引如如下:createindexI_ziponworker(address.zip);使用對(duì)象表表——面向?qū)?duì)象數(shù)據(jù)庫庫設(shè)計(jì)建立對(duì)象表表的類建類型(對(duì)對(duì)象類型聲聲明)createtype類型名asobject(屬性名1類類型說說明,屬性名2類類型說說明,…...memberfunction函數(shù)名(參數(shù)說明明)return返回類型,memberprocedure過程名(參參數(shù)說明),…);方法說明屬性說明對(duì)象屬性類類型對(duì)象類型必必須包含一一個(gè)或多個(gè)個(gè)屬性,屬屬性的類型型可以是:Oracle的原始數(shù)據(jù)據(jù)類型、LOB對(duì)象對(duì)象的引用用(REF)收集(COLLECTION)等對(duì)象方法方法是一個(gè)個(gè)過程或函函數(shù),是是對(duì)象類型型定義的一一部分,是是程序員編編寫的用于于操縱對(duì)象象屬性的子子程序,被被封裝在對(duì)對(duì)象類型中中。方法的種類類:成員方法(member)構(gòu)造方法(constructor)MAP或ORDER方法(排序序方法)一個(gè)類可以以有多個(gè)方方法(也可可以不定義義方法)對(duì)象類型不不存儲(chǔ)數(shù)據(jù)據(jù);必須創(chuàng)創(chuàng)建相應(yīng)的的表來存儲(chǔ)儲(chǔ)數(shù)據(jù)編寫方法代代碼建類型體((實(shí)現(xiàn)類成成員方法))createtypebody類型名ASmemberfunction函數(shù)方法名名(參數(shù)數(shù)說明)return返回類型is說明部分begin執(zhí)行部分end;memberprocedure過程方法名名(參數(shù)說說明)is說明部分begin執(zhí)行部分end;END;方法實(shí)現(xiàn)方法實(shí)現(xiàn)建立對(duì)象表表建對(duì)象表Createtable表名of對(duì)象類型((…);例:CREATETYPEemployee_typeASOBJECT(...);CREATETABLEemployeesOFemployee_type(empnoconstrainte1primarykey);CREATETYPEBODYemployee_type(…);表定義的其其他說明,,如完整性性約束等,,表的列不不能再定義義建立對(duì)象類類型例CREATETYPEemployee_typeASOBJECT(empno NUMBER(3),ename VARCHAR2(10),salNUMBER(6.2),hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER));/創(chuàng)建對(duì)象表表CREATETABLEemployeesOFemployee_type(PRIMARYKEY(empno),UNIQUE(ename),CHECK(sal>300));建立對(duì)象類類型體CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+increment_salWHEREempno=SELF.empno;END;END;對(duì)方法的限限制編譯軟件包包中的函數(shù)數(shù)或過程時(shí)時(shí),可以以使用PRAGMA編譯指令通通知PL/SQL編譯器禁止止某方法對(duì)對(duì)數(shù)據(jù)庫表表和包中的的變量讀寫寫,當(dāng)方方法體中出出現(xiàn)違反情情況時(shí),編編譯出錯(cuò)錯(cuò)。格式:PRAGMARESTRICT_REFERENCES(function_name,WNDS[,WNPS][,RNDS][,RNPS]);WNDS不允許寫數(shù)數(shù)據(jù)庫RNDS不允許讀數(shù)數(shù)據(jù)庫WNPS不允許改程程序包變量量RNPS不允許引用用程序包變變量對(duì)方法的限限制CREATEORREPLACETYPEemployee_typeASOBJECT(empno NUMBER,ename VARCHAR2(10),salNUMBER,hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER),PRAGMARESTRICT_REFERENCES(days_at_company,WNDS,WNPS));對(duì)方法法的限限制CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);UPDATEemployeesSEThiredate=hiredate+30;--END;…..END;-----------------------------------------------------------------------0/0PL/SQL:Compilationunitanalysisterminated2/10PLS-00452:子程序序'DAYS_AT_COMPANY'違反了了它的的相關(guān)關(guān)編譯譯指令令對(duì)象類類型--構(gòu)構(gòu)造子子方法法Oracle自動(dòng)地地為每每個(gè)對(duì)對(duì)象類類型創(chuàng)創(chuàng)建一一個(gè)構(gòu)構(gòu)造方方法。。構(gòu)造子子方法法的名名稱采采用對(duì)對(duì)象類類型名名。構(gòu)造子子方法法的參參數(shù)即即對(duì)象象類型型的所所有屬屬性。。構(gòu)造子子方法法初始始化一一個(gè)對(duì)對(duì)象類類型的的實(shí)例例,并并將將它的的屬性性賦值值。例:insertintoemployeesvalues(employee_type(1,‘‘Jone’’,500,‘5-10月-1989’’));對(duì)象表表操作作建表createtableemployeesofemployee_type;插入數(shù)數(shù)據(jù)insertintoemployeesvalues(employee_type(1,‘Jone’’,500,‘‘5-10月-1989’’));insertintoemployees--省省略構(gòu)構(gòu)造方方法values(1,‘‘Jone’,1500,‘‘5-10月-1989’’);insertintoemployeesvalues(2,'smith',700,‘‘10-5月-1997');insertintoemployeesvalues(3,‘‘king’,900,’25-12月-2000’’);獲取行行對(duì)象象—value函數(shù)數(shù)value(對(duì)象表表別名名)返返回一一個(gè)行行對(duì)象象(對(duì)對(duì)象類類型))value用于從從對(duì)象象表中中取得得對(duì)象象實(shí)例例。不使用用value,SELECT只能返返回一一個(gè)對(duì)對(duì)象的的各個(gè)個(gè)列值值。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')對(duì)象表表方法法調(diào)用用selectename,hiredatefromemployeeswhereempno=1;EMPNAMEHIREDATE--------------------------------------------Jone05-10月-89selectename,e.days_at_company()daysfromemployeesewhereempno=3;EMPNAMEDAYS-----------------------------------------------------------------------------------------------------------------king45使用用別別名名在PL/SQL程序序中中,,取取得得的的對(duì)對(duì)象象實(shí)實(shí)例例必必須須被被相相同同類類型型的的對(duì)對(duì)象象變變量量接接收收。。例::declareempemployee_type;beginselectvalue(e)intoempfromemployeesewhereempno=1;emp.raise_salary(500);end;/PL/SQL中對(duì)象象方方法法的的調(diào)調(diào)用用PL/SQL中對(duì)象象方方法法的的調(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)境境設(shè)設(shè)置置執(zhí)行行結(jié)結(jié)果果::Daysemployed:26PL/SQL輸出出((利利用用包包過過程程))dbms_output.put_line(‘‘……’’);環(huán)境境設(shè)設(shè)置置execdbms_output.enablesetserveroutputon對(duì)象象方方法法小小結(jié)結(jié)對(duì)象象類類型型總總是是有有1到到多多個(gè)個(gè)方方法法((構(gòu)構(gòu)造造方方法法是是隱隱含含方方法法,,成成員員方方法法為為0~n個(gè)個(gè)。。成員員方方法法可可以以帶帶輸輸入入輸輸出出參參數(shù)數(shù)。。每個(gè)個(gè)成成員員方方法法含含有有名名為為SELF的的隱隱含含第第一一參參數(shù)數(shù),,它它具具有有與與對(duì)對(duì)象象類類型型自自身身相相同同的的類類型型。。定義義函函數(shù)數(shù)方方法法,,如如沒沒參參數(shù)數(shù)不不用用寫寫括括號(hào)號(hào),,但但調(diào)調(diào)用用時(shí)時(shí)要要寫寫括括號(hào)號(hào)。。定定義義方方法法形形參參時(shí)時(shí),,類類型型不不用用寫寫長長度度,,如如varchar2對(duì)象象表表的的特特性性對(duì)象象表表是是只只用用對(duì)對(duì)象象類類型型定定義義的的數(shù)數(shù)據(jù)據(jù)庫庫表表,,不不含含關(guān)關(guān)系系型型列列。。對(duì)象象表表的的列列對(duì)對(duì)應(yīng)應(yīng)((用用來來創(chuàng)創(chuàng)建建表表的的))對(duì)對(duì)象象類類型型的的屬屬性性。。對(duì)象象表表的的行行是是表表類類型型的的對(duì)對(duì)象象(實(shí)實(shí)例例),,每每一一行行都都有有一一個(gè)個(gè)系系統(tǒng)統(tǒng)分分配配的的唯唯一一的的對(duì)對(duì)象象標(biāo)標(biāo)識(shí)識(shí)符符((OID)對(duì)象象ID(OID)是每每一一個(gè)個(gè)行行對(duì)對(duì)象象的的唯唯一一描描述述符符,是是全全局局唯唯一一的的,并并且且可可以以引引用用OID不用用于于定定位位數(shù)數(shù)據(jù)據(jù),ROWID仍用用于于定定位位數(shù)數(shù)據(jù)據(jù)oracle通過過對(duì)對(duì)象象引引用用實(shí)實(shí)現(xiàn)現(xiàn)數(shù)數(shù)據(jù)據(jù)庫庫中中不不同同對(duì)對(duì)象象之之間間的的聯(lián)聯(lián)系系((與與關(guān)關(guān)系系表表完完全全不不同同))獲取對(duì)象象引用——ref函數(shù)數(shù)具有OID的對(duì)象實(shí)實(shí)例可以以被引用用(REF)ref(對(duì)象表的的別名))返回對(duì)象象表實(shí)例例指針,,即行對(duì)對(duì)象的引用。例:selectref(e)fromemployeese;REF(e)------------------------------------------------------------------------------------------------------------------------------------------------------------------000028020965D...0BEFE0340800209ADC5901403BE50000000028020965D...0BEFE0340800209ADC5901403BE50001000028020965D...0BEFE0340800209ADC5901403BE50002對(duì)象引用用例建立對(duì)象象表custCreatetypecust_typeasobject(custidnumber(5),namename_type,addressaddress_type);createtablecustofcust_type(custidprimarykey);對(duì)象引用用例向cust表中插入入數(shù)據(jù)insertintocustvalues(1,name_type('王','至遠(yuǎn)'),address_type(‘北京’,‘白頤頤路5號(hào)號(hào)’,100084));insertintocustvalues(2,name_type(‘張’,‘‘大年'),address_type('天津','康寧寧里20號(hào)',300072));insertintocustvalues(3,name_type('趙','力平'),address_type('上海','南京京路23號(hào)',200092));對(duì)象引用用例查詢cust表select*fromcustwherecustid=1;selectc.address.city,.first_name=‘‘王’;修改cust表結(jié)構(gòu)???altertablecustadd(address1address_type);不允許?。。?!對(duì)象引用用例建立goods_typeCREATETYPEgoods_typeASOBJECT(gnoNUMBER(3),gnamevarchar2(20),pricenumber(6,2));/CREATETABLEgoodsOFgoods_type(constraintp1primarykey(gno));INSERTINTOgoodsVALUES(101,'電視機(jī)',2900);INSERTINTOgoodsVALUES(102,'洗衣機(jī)',1500);對(duì)象引用用例CREATETYPEorder_typeASOBJECT(orderidNUMBER(3),customerREFcust_type,orderdateDATE,qtyNUMBER(5),gnoNUMBER(3));/CREATETABLEordersOForder_type(FOREIGNKEY(gno)REFERENCESgoods(gno));對(duì)象引用用例----customer----gnonumberorders----2張張大年----custgno----goodsOID=對(duì)象表——對(duì)象引引用REF是指向行行對(duì)象的的指針,,易于實(shí)實(shí)現(xiàn)表和和表之間間的聯(lián)系系,對(duì)象象之間連連接不再再需要關(guān)關(guān)系表的的連接((JOIN)操作。將對(duì)象表表的表別別名作為為REF的參數(shù),可以取取得對(duì)應(yīng)應(yīng)OID的引用值值。引用只能能用于具具有OID的對(duì)象。。customerREF cust_typeSCOPEISCUSTSCOPE子句用于于限定一一個(gè)引用用在一個(gè)個(gè)指定表表中,這這樣可以以提高查查詢性能能,并減減少存儲(chǔ)儲(chǔ)指針的的空間。。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顧客號(hào),.last_name名,orderdate日期FROMordersoWHEREorderid=1顧客號(hào)名名日日期---------------------------2大年07-1月-00對(duì)象引用用—簡化化了代碼碼數(shù)據(jù)庫管管理對(duì)象象間的連連系,用用戶只需需通過屬屬性進(jìn)行行對(duì)象的的引用。。在關(guān)系設(shè)設(shè)計(jì)中,開發(fā)發(fā)人員必必須使用用聯(lián)接(JOIN)SELECTname,address,...FROMorderso,custcWHEREo.custid=c.custidandorderid=1;deref函數(shù)數(shù)deref(ref指針)返返回指針針指向的的對(duì)象本本身例:selectderef(customer)fromorderswhereorderid=1;DEREF(CUSTOMER)(CUSTID,NAME(FIRST_NAME,LAST_NAME),ADDRESS(CITY,STREET,ZIP))---------------------------------------------------------------------------------CUST_TYPE(2,NAME_TYPE(‘張張’,‘‘大年年’),ADDRESS_TYPE(‘‘天津’’,‘‘康寧里里20號(hào)號(hào)’,300072))試比較::selectderef(ref(c))fromcustcwherecustid=2;和selectvalue(c)fromcustcwherecustid=2;SQL語語句中的的排序和和比較傳統(tǒng)的數(shù)數(shù)據(jù)類型型主要為為標(biāo)量數(shù)數(shù)據(jù)類型型:number,char,date標(biāo)量數(shù)據(jù)據(jù)類型可可以排序序(如orderby……)排序在SQL語句的使使用:關(guān)系運(yùn)算算(><=)between及in的判斷orderbygroupbydistinct子句unique和primarykey約束自定義數(shù)數(shù)據(jù)類型型如何排排序selectwname,addressfromworkerorderbyaddress;錯(cuò)誤位于于第2行行:ORA-22950:無法ORDER沒有MAP或ORDER方法的對(duì)對(duì)象對(duì)象類型型的排序序方法同類的排排序?qū)χеС钟脩魬舳x的的對(duì)象類類型很重重要。對(duì)象類型由于于結(jié)構(gòu)復(fù)雜,必須借助助方法實(shí)現(xiàn)排排序和比較。。MAP方法將對(duì)象類類型轉(zhuǎn)換為傳傳統(tǒng)數(shù)據(jù)類型型。ORDER方法提供排序序規(guī)則。比較較本對(duì)象和另另一對(duì)象實(shí)例例,并返回回1,0,-1分別代表大于、等于、、小于。一個(gè)對(duì)象類型型只能有一個(gè)個(gè)MAP方法或一個(gè)ORDER方法:mapmemberfunction……ordermemberfunction…MAP方法法例對(duì)象類型---->標(biāo)標(biāo)量類型方法返回一個(gè)個(gè)傳統(tǒng)數(shù)據(jù)類類型用于排序序。沒有輸入?yún)?shù)數(shù)(只有一個(gè)個(gè)隱含參數(shù)SELF)。方法被隱含調(diào)調(diào)用。在類型定義中中說明MAP方法:CREATETYPEname_typeASOBJECT(first_namevarchar2(4),last_namevarchar2(4),MAPMEMBERFUNCTIONname_mapRETURNvarchar2);在類型體中實(shí)實(shí)現(xiàn)MAP方法:CREATETYPEBODYname_typeASMAPMEMBERFUNCTIONname_mapRETURNvarchar2ISBEGINRETURNfirst_name||last_name;END;END;排序:SELECTcustid,c.address.cityFROMcustcORDERBYnamedesc;任何基于name_type類型的的排序按名稱稱的拼接串作作為大小比較較的依據(jù)。MAP方法法例MAP方法隱隱含調(diào)用ORDER方法決定類型實(shí)例例的序列關(guān)系系。有一個(gè)參數(shù)(外加一個(gè)隱隱含的參數(shù)SELF)函數(shù)方法返回回一個(gè)整數(shù)如果對(duì)象自身身比參數(shù)對(duì)象象小,返回回-1如果對(duì)象自身身與參數(shù)對(duì)象象相等,返返回0如果對(duì)象自身身比參數(shù)對(duì)象象大,返回回1ORDER方法例1在類型定義中中聲明order方法:CREATEorreplaceTYPEaddress_typeASOBJECT(city VARCHAR2(10),streetVARCHAR2(10),zipNUMBER(6),ORDERMEMBERFUNCTIONaddress_order(other_addressaddress_type)RETURNINTEGER);在類型體中實(shí)實(shí)現(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;排序結(jié)果:姓名名城城市郵郵編------------------------------------------------王至至遠(yuǎn)北北京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);--按對(duì)象大小排排序EMPNOENAMESALHIREDATE------------------------------------------------3king90025-12月-002smith70010-5月-971Jone150005-10月-89對(duì)象類型維護(hù)護(hù)ALTERTYPEemployee_typeREPLACEASOBJECT(empnoNUMBER,enameVARCHAR2(10),salNUMBER,hiredateDATE,MEMBERFUNCTIONdays_at_companyRETURNNUMBER,MEMBERPROCEDUREraise_salary(increment_salNUMBER),PRAGMARESTRICT_REFERENCES(days_at_company,wnds,wnps),對(duì)象類型維護(hù)護(hù)ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGER,MEMBERFUNCTIONmonth_at_company--新方法RETURNNUMBER,PRAGMARESTRICT_REFERENCES(month_at_company,wnds));/對(duì)象類型維護(hù)護(hù)CREATEORREPLACETYPEBODYemployee_typeASMEMBERFUNCTIONdays_at_companyRETURNNUMBERISBEGINRETURNfloor(sysdate-hiredate);END;MEMBERPROCEDUREraise_salary(increment_salNUMBER)ISBEGINUPDATEemployeesSETsal=sal+increment_salWHEREempno=SELF.empno;END;對(duì)象類型維護(hù)護(hù)ORDERMEMBERFUNCTIONemp_order(other_empemployee_type)RETURNINTEGERISBEGINRETURNFLOOR(-(SELF.hiredate––other_emp.hiredate));END;MEMBERFUNCTIONmonth_at_companyRETURNNUMBERISBEGINRETURNmonths_between(sysdate,hiredate);END;END;/對(duì)象類型信息息與類型有關(guān)的的數(shù)據(jù)字典視視圖user_typestype_nameattributesmethods…user_type_attrstype_nameattr_namelengthattr_type_name……user_type_methodstype_namemethod_name…對(duì)象類型信息息查看對(duì)象類型型selecttype_name,attributes,methodsfromuser_types;TYPE_NAMEATTRIBUTESMETHODS--------------------------------------------------------------ADDRESS_TYPE31EMPLOYEE_TYPE31NAME_TYPE20columntype_nameformata20wrapcolumnattributesformat999wrapcolumnmethodsformat999wrap對(duì)象類型信息息查看類屬性定定義selectattr_name,length,attr_type_namefromuser_type_attrswheretype_name=‘ADDRESS_TYPE’;ATTR_NAMELENGTH ATTR_TYPE_NAME-------------------------------------------------------------------CITY20VARCHAR2STREET 30 VARCHAR2ZIPNUMBER對(duì)象類型信息息查看類方法定定義selecttype_name,method_namefromuser_type_methods;TYPE_NAMEMETHOD_NAME-----------------------------------------------ADDRESS_TYPEADDRESS_ORDEREMPLOYEE_TYPEDAYS_AT_COMPANYEMPLOYEE_TYPEMONTH_AT_COMPANYEMPLOYEE_TYPEEMP_ORDERNAME_TYPENAME_MAP對(duì)象類型相關(guān)關(guān)性在對(duì)象和對(duì)象象類型之間存存在相關(guān)樹。。必須保證樹樹的完整。不不允許破壞被被引用的類型型。例如:droptypename_type;當(dāng)類型已被引用用時(shí)不讓刪droptypename_typeforce;強(qiáng)行刪除,再再查使用該類類型定義的表表時(shí)出錯(cuò)。name_typeaddress_type對(duì)象類型相關(guān)關(guān)性workercust_typeCustemployee_typeemployeesordersgoodsgoods_typeorder_type查看對(duì)象相相關(guān)性例:selectname,type,referenced_nameRname,referenced_typeRtypefromuser_dependencieswherename=‘ORDERS’;NAMETYPERNAMERTYPE-------------------------------------------------------------------------ORDERSTABLESTANDARDPACKAGEORDERSTABLECUST_TYPETYPEORDERSTABLEORDER_TYPETYPE查看對(duì)象相相關(guān)性例:=‘‘CUST’nametypeRnameRtype---------------------------------------------------------------------------------------------------------------CUSTTABLESTANDARDPACKAGECUSTTABLENAME_TYPETYPECUSTTABLEADDRESS_TYPETYPECUSTTABLECUST_TYPETYPE例:select…referenced_name=‘cust_type’’;查看哪些對(duì)對(duì)象使用了了cust_type類型。查看對(duì)象相相關(guān)性例:=‘‘CUST_TYPE’;nametypeRnameRtype-------------------------------------------------------------------------CUST_TYPETYPESTANDARDPACKAGECUST_TYPETYPENAME_TYPETYPECUST_TYPETYPEADDRESS_TYPETYPE列出依賴樹樹:執(zhí)行oracle根目錄/rdbms/admin/utldtree.sql生成兩個(gè)視視圖deptree和ideptree程序視圖顯顯示依賴樹樹。小結(jié)—對(duì)象象屬性和方方法當(dāng)使用表的的當(dāng)前行對(duì)對(duì)象時(shí),對(duì)對(duì)象屬性和和方法的引引用必須使使用表的別別名,而不不能是實(shí)際際的表名selectc.address.city,.first_name='王';selecte.days_at_company()fromemployeesewheree.empno=3;小結(jié)—列對(duì)對(duì)象與行對(duì)對(duì)象列對(duì)象:嵌嵌入型對(duì)象象,作為表表中的列來來處理的對(duì)對(duì)象,要通通過主表才才能訪問。。自定義復(fù)合合數(shù)據(jù)類型型可變數(shù)組嵌套表行對(duì)象:不不是嵌入型型對(duì)象,而而是引用型型對(duì)象,可可以通過其其他對(duì)象的的引用(ref)來訪問。列對(duì)象沒有有OID,而且不能被被引用。列對(duì)象是基基于對(duì)數(shù)據(jù)據(jù)庫已有功功能的擴(kuò)充充(自定義義類型)。。收集類型Oracle的數(shù)據(jù)類型型擴(kuò)展收集類型實(shí)現(xiàn)一對(duì)多多關(guān)系的模模型化。在關(guān)系設(shè)計(jì)計(jì)中,只能能通過聯(lián)接接(JOIN)實(shí)現(xiàn)表的關(guān)關(guān)聯(lián),將將導(dǎo)致復(fù)雜雜的運(yùn)算。。在對(duì)象設(shè)計(jì)計(jì)中,可以以通過收集集實(shí)現(xiàn)對(duì)象象類型的關(guān)關(guān)聯(lián)收集類型記錄數(shù)組表收集類型--可變數(shù)數(shù)組支持有序的的一對(duì)多的的關(guān)系??梢栽谝恍行兄写鎯?chǔ)某某個(gè)記錄的的重復(fù)屬性性。可變,但要要指定數(shù)組組最大容量量。數(shù)組元素具具有相同類類型,可以以是基本本類型、REF或?qū)ο箢愋托?。但不能能是嵌套表表或可變?shù)數(shù)組類型。。不能是VARRAYOFLOB類型book數(shù)據(jù)結(jié)構(gòu)分析化學(xué)相關(guān)圖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ù)實(shí)現(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ù)組組的對(duì)象表表CREATETABLEborrowerOFborrower_type;收集類型--收集的的方法收集(collection)的方法:內(nèi)內(nèi)置的函函數(shù)和過程程函數(shù)方法::EXISTS(n)當(dāng)收集類型型中指定元元素存在為為“真”COUNT返回當(dāng)前收收集類型中中的元素個(gè)個(gè)數(shù)。LIMIT返回可變數(shù)數(shù)組元素個(gè)個(gè)數(shù)的上限限值FIRSTandLAST返回收集中中第一個(gè)和和最后一個(gè)個(gè)元素的下下標(biāo)。((對(duì)于可變變數(shù)組,總總是返回1和count)PRIOR(n)andNEXT(n)返回指定元元素的前一一個(gè)和后一一個(gè)元素的的下標(biāo)。收集集類類型型--收收集集的的方方法法過程程方方法法::EXTEND擴(kuò)充充收收集集的的大大小小extend擴(kuò)充充一一個(gè)個(gè)空空元元素素extend(n)擴(kuò)充充n個(gè)空空元元素素extend(n,I)將收收集集中中第第I個(gè)元元素素拷拷貝貝n份,,追追加加到到收收集集中中。。TRIM從收收集集尾尾部部刪刪除除元元素素trim刪除除收收集集中中最最后后一一個(gè)個(gè)元元素素trim(n)刪除除收收集集中中最最后后n個(gè)元元素素DELETE刪除除元元素素delete刪除除收收集集中中所所有有元元素素delete(n)刪除除收收集集中中第第n個(gè)元元素素delete(m,n)刪除除收收集集中中第第m~n個(gè)元元素素收集集類類型型--可可變變數(shù)數(shù)組組插入入數(shù)數(shù)據(jù)據(jù)INSERTINTOborrowerVALUES(980001,‘‘李星星’’,‘‘力力01’’,book_list_type(‘‘?dāng)?shù)據(jù)據(jù)結(jié)結(jié)構(gòu)構(gòu)’’,‘‘大大學(xué)學(xué)物物理理’’));INSERTINTOborrowerVALUES(970025,‘‘王辰辰’’,‘‘化化91’’,book_list_type(‘‘計(jì)算算方方法法’’,‘‘分分析析化化學(xué)學(xué)’’));修改改數(shù)數(shù)據(jù)據(jù)((增增加加一一本本書書))UPDATEborrowerbSETb.books=b.add_book('物理理習(xí)習(xí)題題集集')WHEREb.sno=980001;包含含可可變變數(shù)數(shù)組組列列的的查查詢?cè)儾樵冊(cè)儯海簊electsname,booksfromborrower;SNAMEBOOKS---------------------------------------------------------------------------李星星BOOK_LIST_TYPE('數(shù)據(jù)據(jù)結(jié)結(jié)構(gòu)構(gòu)','物物理理習(xí)習(xí)題題集集')王辰辰BOOK_LIST_TYPE(‘‘計(jì)算算方方法法’’,‘‘分分析析化化學(xué)學(xué)’’)查數(shù)數(shù)組組元元素素??selectb.sname,b.class,b.books(2)fromborrowerb錯(cuò)誤誤位位于于第第1行行::*ORA-00904:非法法的的列列名名可變變數(shù)數(shù)組組的的操操作作對(duì)數(shù)數(shù)組組元元素素的的檢檢索索不不能能簡簡單單地地用用select語句句,,而而應(yīng)應(yīng)在在PL/SQL里用用有有關(guān)關(guān)方方法法和和循循環(huán)環(huán)結(jié)結(jié)構(gòu)構(gòu)查查詢?cè)?。。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();--初始化化一個(gè)個(gè)數(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ù)結(jié)結(jié)構(gòu)');--調(diào)用還還書方方法end;收集類類型方方法例例還能借借幾本本MEMBERFUNCTIONbnum_bookRETURNnumberIStemp_arraybook_list_type;BEGINtemp_ar

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論