版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1任務(wù)6圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用預(yù)備知識(shí)任務(wù)6.1圖書銷售管理數(shù)據(jù)庫中索引的使用任務(wù)6.2圖書銷售管理數(shù)據(jù)庫中外部表的應(yīng)用任務(wù)6.3圖書銷售管理數(shù)據(jù)庫中索引組織表和分區(qū)表的應(yīng)用任務(wù)6.4創(chuàng)建圖書銷售管理數(shù)據(jù)庫的視圖任務(wù)6.5圖書銷售管理數(shù)據(jù)庫中序列和同義詞的應(yīng)用任務(wù)實(shí)訓(xùn)學(xué)生管理系統(tǒng)數(shù)據(jù)的導(dǎo)出和導(dǎo)入Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)掌握索引的概念、分類、作用以及索引的創(chuàng)建、重建與合并掌握外部數(shù)據(jù)文件的讀取和錯(cuò)誤處理方法掌握索引組織表和分區(qū)表的創(chuàng)建與管理掌握視圖的概念以及視圖的創(chuàng)建和使用了解序列和同義詞的含義和功能學(xué)習(xí)目標(biāo)任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用預(yù)備知識(shí)返回任務(wù)6圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用知識(shí)點(diǎn)1索引知識(shí)點(diǎn)2索引組織表和分區(qū)表知識(shí)點(diǎn)3視圖知識(shí)點(diǎn)4序列和同義詞Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)知識(shí)點(diǎn)11.索引概述在Oracle中,索引是數(shù)據(jù)庫中用于存放表中每一條記錄位置的一種模式對(duì)象,索引主要用于提高表的查詢速度。索引與表一樣,有獨(dú)立的數(shù)據(jù)段存儲(chǔ),并且可以通過設(shè)置存儲(chǔ)參數(shù),控制索引段的盤區(qū)分配方式。索引的作用相當(dāng)于圖書的目錄,例如要在一本書中找到有關(guān)某方面的知識(shí)時(shí),可以采取兩種方法,一種方法是從書的開頭逐頁翻閱,一直到尾,這樣需要翻閱全書才能找到所需要的知識(shí)。另一種方法是從書的索引目錄中查找所需要的知識(shí)主題,然后再根據(jù)目錄中的頁碼找到所需的知識(shí)內(nèi)容。非常明顯,采用第二種方法要比第一種快。同樣道理,如果一個(gè)表中包含很多記錄,當(dāng)對(duì)表執(zhí)行查詢時(shí),第一種方法須將所有的記錄全部取出,把每一條記錄與查詢條件進(jìn)行比較,然后返回滿足條件的記錄。這種搜索信息的方式稱為全表搜索,全表搜索會(huì)消耗大量的數(shù)據(jù)庫系統(tǒng)資源,并造成大量的I/O操作。第二種方法是通過在表中建立類似于目錄的索引,然后在索引中找到符合查詢條件的索引值,最后就可以通過保存在索引中的ROWID快速找到表中對(duì)應(yīng)的記錄,這就是索引的作用。在數(shù)據(jù)庫中使用索引是以占用磁盤空間和消耗系統(tǒng)資源為代價(jià)的,創(chuàng)建索引需要占用大量存儲(chǔ)空間,同時(shí)再向表中添加、更新或刪除記錄時(shí),數(shù)據(jù)庫需要花費(fèi)額外的開銷來維護(hù)和更新索引。任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用小提示:Oracle數(shù)據(jù)庫內(nèi)部使用ROWID來存儲(chǔ)表中數(shù)據(jù)行的物理位置。使用索引查詢數(shù)據(jù)時(shí),首先通過索引列的值查詢到ROWID,然后通過ROWID找到記錄的物理地址。采用B樹索引可以確保Oracle只需要花費(fèi)相同的I/O就可以獲得要查詢的索引條目。例如,采用B樹索引查詢編號(hào)為1020的結(jié)點(diǎn),其查詢過程如下:①訪問根結(jié)點(diǎn),將1020與1011與1013進(jìn)行比較。②因?yàn)?020大于1013,所以接著搜索右子樹,在右子樹中將1020再與1013、1017和1021進(jìn)行比較。③由于1020大于1017但是小于1021,所以搜索右子樹的第二結(jié)點(diǎn),并找到要查詢的索引條目。(2)位圖索引位圖索引與B樹索引不同,在B樹索引中,通過在索引中保存排過序的索引列的值與相對(duì)應(yīng)記錄的ROWID來實(shí)現(xiàn)快速查找,但是對(duì)于一些特殊的表,B樹索引的效率可能會(huì)很低。例如,在圖書銷售管理數(shù)據(jù)庫的客戶信息表clients中的客戶性別(client_sex)列,它只有兩個(gè)取值:“男”或“女”。如果在該列上創(chuàng)建B樹索引,那么創(chuàng)建的B樹只有兩個(gè)分支,使用該索引對(duì)客戶信息進(jìn)行檢索時(shí),將返回接近一半的記錄,這樣也就失去了索引的基本作用。所以,當(dāng)一個(gè)列的所有取值數(shù)量與行的總數(shù)的比例小于1%時(shí),那么該列不再適合建立B樹索引,而適用建立位圖索引。(3)反向鍵索引在Oracle中,系統(tǒng)會(huì)自動(dòng)為表的主鍵列建立索引,這個(gè)索引是普通的B樹索引。對(duì)于主鍵值是按順序添加的情況,默認(rèn)的B樹索引并不理想,這是因?yàn)槿绻饕械闹稻哂袊?yán)格順序,隨著數(shù)據(jù)行的插入,索引樹的層級(jí)就會(huì)增長(zhǎng)很快。搜索索引發(fā)生的I/O讀寫次數(shù)和索引樹的層級(jí)數(shù)成正比,也就是說,一棵具有5個(gè)層級(jí)的B樹索引,在最終讀到索引數(shù)據(jù)時(shí),最多可能發(fā)生多達(dá)5次I/O操作。另外,由于B樹索引是以嚴(yán)格有序的方式將索引數(shù)值插入的,那么B樹索引將變成一棵不對(duì)稱的“歪樹”。反向鍵索引是一種特殊類型的B樹索引,在索引基于含有有序數(shù)的列時(shí)非常有用。反向鍵索引的工作原理在存儲(chǔ)結(jié)構(gòu)方面與普通的B樹索引相同。然而,如果用戶使用序列編號(hào)在表中輸入新的記錄,則反向鍵索引首先反向每個(gè)列鍵值的字節(jié),然后在反向后的新數(shù)據(jù)上進(jìn)行索引。例如,如果用戶輸入索引鍵為2008,就反向轉(zhuǎn)換為8002進(jìn)行索引,2015就反向轉(zhuǎn)換為5102進(jìn)行索引。知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用(4)基于函數(shù)的索引基于函數(shù)的索引其實(shí)也是B樹索引,不過基于函數(shù)的索引存放是經(jīng)過函數(shù)處理后得到的數(shù)據(jù),而不存放數(shù)據(jù)本身。如果檢索的數(shù)據(jù)需要對(duì)字符大小寫轉(zhuǎn)換或數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,則使用這種索引就可以提高查詢效率。例如圖書銷售管理數(shù)據(jù)庫中的銷售單表
saleorders,其中saleorder_date列存儲(chǔ)了圖書銷售的日期,如果要搜索2011年以后銷售單信息,那么使用WHERE
saleorder_date>=′2011′這樣的搜索條件時(shí),會(huì)提示數(shù)據(jù)類型不匹配的錯(cuò)誤。為了解決這個(gè)問題,可以在saleorder_date列使用類型轉(zhuǎn)換函數(shù)TO_CHAR,代碼如下:SQL>SELECT
*
FROM
saleorders2WHERE
TO_CHAR(sale_date,′YYYY′)>=′2011′;使用這種方法后,雖然可以正常運(yùn)行,但是該查詢將執(zhí)行全表搜索,即使在birthday列建立了索引,對(duì)列值進(jìn)行類型轉(zhuǎn)換后,該值也不會(huì)出現(xiàn)在索引中。為了解決這個(gè)問題,可以創(chuàng)建基于函數(shù)的索引?;诤瘮?shù)的索引只是常規(guī)的B樹索引,但它是基于一個(gè)應(yīng)用于表中數(shù)據(jù)的函數(shù),而不是直接放在表中的數(shù)據(jù)本身上。知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用3.索引的使用環(huán)境根據(jù)不同的數(shù)據(jù)查詢需要,建立不同的索引類型,一般基于以下原則:B樹索引可以快速定位行,應(yīng)建立于高cardinality列(即列的唯一值除以行數(shù)為一個(gè)很大的值,存在很少的相同值)的情況下。B樹索引分為唯一性和非唯一性索引,如果某個(gè)列的
值唯一,則在該列上就可以創(chuàng)建唯一性索引,否則就創(chuàng)建非唯一性索引,默認(rèn)情況下創(chuàng)建的是非唯一性索引。位圖索引主要用于決策支持系統(tǒng)或靜態(tài)數(shù)據(jù),不支持行級(jí)鎖定,適合集中讀取,不適合插入和修改。位圖索引最好用于低cardinality列。反向索引應(yīng)用于特殊場(chǎng)合,多用于并行服務(wù)器環(huán)境下,用于減少索引葉的競(jìng)爭(zhēng)。基于函數(shù)索引應(yīng)用于查詢語句條件列上包含函數(shù)的情況,索引中儲(chǔ)存了經(jīng)過函數(shù)計(jì)算的索引碼值,這種索引可以在不修改應(yīng)用程序的情況下提高查詢效率。知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用4.創(chuàng)建索引創(chuàng)建索引的語法如下:CREATE
UNIQUE|BITMAP
INDEX
<schema>.<index_name>ON
<schema>.<table_name>(<column_name>|<expression>ASC|DESC,<column_name>|<expression>ASC|DESC,…)TABLESPACE<tablespace_name>STORAGE
(<STORAGE_SETTINGS>LOGGING|NOLOGGINGCOMPUTE
STATISTICSNOCOMPRESS|COMPRESS
<nn>NOSORT|REVERSEPARTITION
|GLOBAL
PARTITION
<partition_setting>知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用語法說明如下:UNIQUE|BITMAP:在創(chuàng)建索引時(shí),如果指定關(guān)鍵字UNIQUE,表示建立唯一B樹索引,
要求表中的每一行在索引列中都包含唯一的值。如果指定BITMAP關(guān)鍵字,表示創(chuàng)建一個(gè)位圖索引。這兩個(gè)關(guān)鍵字可以省略,省略后創(chuàng)建的索引為普通B樹索引。ON<schema>.<table_name>:表示創(chuàng)建索引的數(shù)據(jù)表名。(3)(<column_name>|<expression>ASC|DESC,…):該語句列出了創(chuàng)建索引的列。
ASC為默認(rèn)順序,表示為升序排列,DESC為降序排列。各列之間用逗號(hào)間隔,也可以不使用基本列,而使用一個(gè)表達(dá)式,這時(shí)創(chuàng)建的索引為“基于函數(shù)的索引”。TABLESPACE<tablespace_name>:表示指定存儲(chǔ)索引的表空間。如果省略,則索引將使用用戶模式的默認(rèn)表空間。STORAGE(<STORAGE_SETTINGS>:表示為索引指定存儲(chǔ)參數(shù)。如果省略,則使用指定表空間或默認(rèn)表空間的存儲(chǔ)參數(shù)。LOGGING|NOLOGGING:LOGGING表示存儲(chǔ)日志信息,NOLOGGING表示不存儲(chǔ)日志信息。COMPUTE
STATISTICS:創(chuàng)建新索引時(shí)收集統(tǒng)計(jì)信息。NOCOMPRESS|COMPRESS<nn>:表示是否使用“鍵壓縮”。使用鍵壓縮可以刪除一個(gè)鍵列中出現(xiàn)的重復(fù)值,節(jié)省空間。NOSORT|REVERSE:使用NOSORT將使用與表中相同的順序創(chuàng)建索引,不再對(duì)索引進(jìn)行排序。REVERSE則表示以相反的順序存儲(chǔ)索引值。PARTITION|GLOBAL
PARTITION<partition_setting>:使用該子句可以在分區(qū)表或未分區(qū)表上對(duì)創(chuàng)建的索引進(jìn)行分區(qū)。知識(shí)點(diǎn)1任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用知識(shí)點(diǎn)2任務(wù)6圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用1.索引組織表(1)索引組織表概念索引組織表是Oracle提供的用于提高查詢效率的一種新型表,索引組織表也稱為IOT,它不僅可以存儲(chǔ)數(shù)據(jù),而且還可以存儲(chǔ)為表建立的索引,以提高查詢性能。索引組織表與普通表不同,索引組織表的數(shù)據(jù)是以被排序后的主鍵順序存儲(chǔ)的。索引組織表為精確匹配和范圍搜索的數(shù)據(jù)查詢提供了快速訪問。索引組織表是以犧牲插入和更新性能為代價(jià)的。在索引組織表中,如果向表中添加數(shù)據(jù),首先會(huì)根據(jù)主鍵列對(duì)其排序,然后才將數(shù)據(jù)寫入磁盤,這樣能夠在使用主鍵列查詢時(shí),在索引組織表中得到更好的讀取性能。在基本表上進(jìn)行相同的查詢時(shí),首先讀取索引,然后判斷數(shù)據(jù)塊在磁盤上的位置,最后Oracle必須將相關(guān)的數(shù)據(jù)塊放入內(nèi)存中。而索引組織表將所有數(shù)據(jù)都存儲(chǔ)在索引中,所以不需要再去查詢存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)塊。在索引組織表中執(zhí)行查詢的效率是基本表的兩倍。索引組織表與基本表的結(jié)構(gòu)對(duì)比,如圖6-2所示。圖6-2索引組織表與基本表的結(jié)構(gòu)對(duì)比Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)知識(shí)點(diǎn)2任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用(2)創(chuàng)建索引組織表創(chuàng)建索引組織表使用CREATE
TABLE語句時(shí),要提供如下選項(xiàng):①ORGANIZATION
INDEX子句,必選項(xiàng),表示創(chuàng)建的表為索引組織表。②必須為索引組織表指定主鍵。③OVERFLOW子句,可選項(xiàng)。表示使用行溢出子句,當(dāng)索引包含大量的數(shù)據(jù)時(shí),將會(huì)降低索引組織表的查詢性能,為此引用了行溢出說明子句,可以將經(jīng)常要查詢的數(shù)據(jù)放在基本索引塊中,將不經(jīng)常查詢或者較大的數(shù)據(jù)列存儲(chǔ)在另外的段中,這種段稱為溢出段,有兩個(gè)選項(xiàng)規(guī)定數(shù)據(jù)的存儲(chǔ)方式:INCLUDING和PCTTHRESHOLD。INCLUDING
n,表示當(dāng)行中數(shù)據(jù)超出此百分比,該行尾部的列溢出到溢出段。PCTTHRESHOLD
column_name,表示指定列之前的所有列均存入基本索引塊,之后的列則存入溢出段。④COMPRESS子句,可選項(xiàng)。表示使用鍵壓縮方法創(chuàng)建索引組織表時(shí),能夠消除索引鍵列中重復(fù)出現(xiàn)的值,它可以用于所有索引的選項(xiàng)。2.臨時(shí)表Oracle的臨時(shí)表是“靜態(tài)”的,它與普通的數(shù)據(jù)表一樣在數(shù)據(jù)庫中只需建立一次,其結(jié)構(gòu)從創(chuàng)建到刪除的整個(gè)期間都是有效的。臨時(shí)表的特點(diǎn)①臨時(shí)表只有在用戶實(shí)際向表中添加數(shù)據(jù)時(shí),才會(huì)為其分配存儲(chǔ)空間。②為臨時(shí)表分配的空間來自臨時(shí)表空間,避免了與永久對(duì)象的數(shù)據(jù)爭(zhēng)用存儲(chǔ)空間。③臨時(shí)表中存儲(chǔ)的數(shù)據(jù)也是以事務(wù)或者會(huì)話為基礎(chǔ)的,當(dāng)用戶當(dāng)前的事務(wù)結(jié)束或者會(huì)話終止時(shí),臨時(shí)表就會(huì)因?yàn)獒尫潘加玫拇鎯?chǔ)空間而丟失數(shù)據(jù)。④與堆表一樣,用戶可以在臨時(shí)表上建立索引、視圖和觸發(fā)器等,但建立的索引、視圖和觸發(fā)器也是臨時(shí)的,只對(duì)當(dāng)前會(huì)話或者事務(wù)有效。臨時(shí)表的級(jí)別臨時(shí)表主要分為兩種:事務(wù)級(jí)別臨時(shí)表和會(huì)話級(jí)別臨時(shí)表。①事務(wù)級(jí)別臨時(shí)表事務(wù)級(jí)別臨時(shí)表是指臨時(shí)表中的數(shù)據(jù)只在事務(wù)生命周期中存在。當(dāng)一個(gè)事務(wù)結(jié)束時(shí),臨時(shí)表中的數(shù)據(jù)被自動(dòng)清除。②會(huì)話級(jí)別臨時(shí)表會(huì)話級(jí)別臨時(shí)表是指臨時(shí)表中的數(shù)據(jù)只在會(huì)話生命周期中存在,當(dāng)用戶退出,會(huì)話結(jié)束時(shí),臨時(shí)表中的數(shù)據(jù)被自動(dòng)清除。知識(shí)點(diǎn)2任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用3.分區(qū)表分區(qū)表在大型的數(shù)據(jù)庫應(yīng)用中,需要處理的數(shù)據(jù)量可以達(dá)到幾十到幾百GB,甚至達(dá)到TB級(jí),例如圖書銷售管理數(shù)據(jù)庫的圖書數(shù)據(jù)表books。為了提高對(duì)大容量數(shù)據(jù)庫的讀寫和查詢速度,Oracle提供了分區(qū)技術(shù)。分區(qū)表是將一個(gè)非常大的表分割成較小的片段(分區(qū))。在實(shí)際應(yīng)用中,對(duì)分區(qū)表的操作是在獨(dú)立的分區(qū)上,但是對(duì)用戶而言,分區(qū)表的使用就像一個(gè)基本表一樣。分區(qū)表的類型Oracle數(shù)據(jù)庫提供對(duì)表或索引的分區(qū)類型有五種:范圍分區(qū)、散列分區(qū)、列表分區(qū)、組合范圍散列分區(qū)和組合范圍列表分區(qū)。在創(chuàng)建分區(qū)表時(shí),應(yīng)根據(jù)不同類型分區(qū)的特點(diǎn),選擇合適的分區(qū)類型。①范圍分區(qū)表范圍分區(qū)表就是根據(jù)數(shù)據(jù)表中的某個(gè)值的范圍進(jìn)行分區(qū),根據(jù)某個(gè)值的大小或次序,決定將每條數(shù)據(jù)分別存儲(chǔ)在哪個(gè)分區(qū)上。創(chuàng)建范圍分區(qū)需要使用PARTITION
BY
RANGE子句。知識(shí)點(diǎn)2任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用②散列分區(qū)表散列分區(qū)表是通過HASH算法均勻分布數(shù)據(jù)的一種分區(qū)類型。通過在I/O設(shè)備上進(jìn)行散列分區(qū),可以使得分區(qū)的大小一致。創(chuàng)建散列分區(qū)需要使用PARTITION
BY
HASH子句。③列表分區(qū)表列表分區(qū)表是基于特定值的列表對(duì)表進(jìn)行分區(qū)。列表分區(qū)適用于分區(qū)列表的值為非數(shù)字或日期數(shù)據(jù)類型,并且分區(qū)列的取值范圍較少時(shí)使用。創(chuàng)建列表分區(qū)需要使用PARTITION
BY
LIST子句。④組合范圍散列分區(qū)表組合范圍散列分區(qū)表,是范圍分區(qū)和散區(qū)進(jìn)行組合使用。這種形式首先使用范圍值進(jìn)行分區(qū),然后使用散列值進(jìn)行分區(qū)。創(chuàng)建組合范圍散列分區(qū)表要同時(shí)使用范圍分區(qū)子句和散列分區(qū)子句。⑤組合范圍列表分區(qū)表組合范圍列表分區(qū),就是將范圍分區(qū)和列表分區(qū)結(jié)合使用。這種形式首先使用范圍值進(jìn)行分區(qū),然后使用列表值進(jìn)行分區(qū)。創(chuàng)建組合范圍列表分區(qū)表要同時(shí)使用范圍分區(qū)子句和列表分區(qū)子句。知識(shí)點(diǎn)2任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用1.視圖概述(1)視圖視圖是根據(jù)一個(gè)或多個(gè)基本表定義的一個(gè)虛擬表,視圖并不存儲(chǔ)真正的數(shù)據(jù),它的行和列的數(shù)據(jù)來自于定義視圖的查詢語句中引用的數(shù)據(jù)表,這些表稱為視圖的基本表。視圖僅僅把視圖定義語句存儲(chǔ)在Oracle數(shù)據(jù)字典中,實(shí)際的數(shù)據(jù)仍保存在基本表中,所以建立視圖不用消耗任何存儲(chǔ)空間。視圖可以建立在基本表上,也可以建立在其他視圖上,或者同時(shí)建立在兩者之上。視圖看上去非常像數(shù)據(jù)庫中的表,用戶可以在視圖中進(jìn)行INSERT、UPDATE和DELETE操作,所以說視圖是可更新的,但通過視圖修改數(shù)據(jù)時(shí),實(shí)際上是在修改基本表中的數(shù)據(jù),相應(yīng)地,改變基本表中的數(shù)據(jù)也會(huì)反映在由該表產(chǎn)生的視圖中。知識(shí)點(diǎn)3任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用(2)視圖的作用①視圖可以隱藏復(fù)雜查詢,簡(jiǎn)化用戶編寫查詢語句例如程序員在設(shè)計(jì)開發(fā)圖書銷售管理系統(tǒng)時(shí),經(jīng)常要查詢圖書的銷售情況信息,這樣需要涉及圖書表、銷售單表和客戶表,由于涉及多表查詢,因此必須建立表與表之間的聯(lián)系,同時(shí)還要添加其他的查詢條件,為此在查詢圖書銷售情況時(shí)書寫的SQL語句比較復(fù)雜,如果將其定義為視圖,則程序員在設(shè)計(jì)查詢圖書的銷售情況信息時(shí),只需從視圖中查詢即可,不必重復(fù)輸入復(fù)雜的SQL語句。②視圖保證了數(shù)據(jù)的安全性用戶在進(jìn)行數(shù)據(jù)查詢時(shí),如果直接從基本表中進(jìn)行查詢,則必須要指定表中的基本列,這樣表中的所有數(shù)據(jù)以及結(jié)構(gòu)將全部呈現(xiàn)在用戶面前,會(huì)給數(shù)據(jù)庫造成一定安全性問題。如果將多個(gè)基本表的查詢定義為視圖,則用戶在查詢時(shí)只能看見視圖,同時(shí)視圖的結(jié)構(gòu)可以使用它所基于表的列名不同的列名,還可以建立限制其他用戶訪問的視圖,保證了數(shù)據(jù)的安全性。知識(shí)點(diǎn)3任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用2.創(chuàng)建視圖在當(dāng)前用戶模式下創(chuàng)建視圖,用戶必須有CREATEVIEW的系統(tǒng)權(quán)限。在其他用戶模式下創(chuàng)建視圖,用戶必須具有CREATE
ANY
VIEW的系統(tǒng)權(quán)限。另外,如果創(chuàng)建視圖所用到的表或視圖不是該用戶的表,必須由擁有該表或視圖的用戶將其相關(guān)權(quán)限賦予該用戶。創(chuàng)建視圖的命令為CREATE
VIEW,定義視圖的查詢可以建立在一個(gè)或多個(gè)表,或其他視圖上。創(chuàng)建視圖時(shí)可以帶有一些關(guān)鍵字或子句。其語法如下:CREATE
[
OR
REPLACE
]
[
FORCE|NOFORCE
]
VIEW
view_name[
(
alias_name
[,…]
)
]AS
subquery[WITH
{
CHECK
OPTION|READ
ONLY
}
CONSTRAINT
constraint_name];語法說明如下:OR
REPLACE:表示如果視圖已存在,則替換現(xiàn)有視圖。FORCE|NOFORCE:FORCE表示即使基本表不存在,也要?jiǎng)?chuàng)建視圖;NOFORCE表示如果基本表不存在,則不創(chuàng)建視圖,默認(rèn)為NOFORCE。iew_name:創(chuàng)建的視圖名稱。知識(shí)點(diǎn)3任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用alias_name:子查詢中列(或表達(dá)式)的別名。別名的個(gè)數(shù)與子查詢中列(或表達(dá)式)的個(gè)數(shù)必須一致。subquery:子查詢語句。CHECK
OPTION:除了可以對(duì)視圖執(zhí)行SELECT查詢以外,還可以對(duì)視圖進(jìn)行DML操作。對(duì)視圖的操作實(shí)際上也是對(duì)基本表的操作。默認(rèn)情況下,可以通過視圖對(duì)基本表中的所有數(shù)據(jù)行進(jìn)行DML操作,包括視圖的子查詢無法檢索到的數(shù)據(jù)行。如果使用WITH
CHECK
OPTION,則表示只能對(duì)視圖中子查詢能夠檢索的數(shù)據(jù)行進(jìn)行DML操作。READ
ONLY:表示通過視圖只能讀取基本表中的數(shù)據(jù)行,而不能進(jìn)行DML操作。CONSTRAINT
constraint_name:為WITH
CHECK
OPTION或WITH
READ
ONLY約束定義約束名稱。知識(shí)點(diǎn)3任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用3.查看視圖一個(gè)視圖創(chuàng)建好后,想要了解其定義信息(主要是指其子查詢內(nèi)容),可以查詢與視圖相關(guān)的數(shù)據(jù)字典。與視圖相關(guān)的數(shù)據(jù)字典視圖有:DBA_VIEWS:存放了數(shù)據(jù)庫中所有視圖的信息;ALL_VIEWS:存放用戶可存取的視圖的信息;USER_VIEWS:存放用戶擁有的視圖的信息。它們各自有3個(gè)字段:視圖名
VIEW_NAME,視圖文本長(zhǎng)度TEXT_LENGTH,視圖文本TEXT。其中TEXT字段比較有用,它反映了創(chuàng)建該視圖的語句。4.刪除視圖刪除視圖的操作很簡(jiǎn)單,使用DROP
VIEW命令。同時(shí)將視圖定義從數(shù)據(jù)字典中刪除,基于視圖的權(quán)限也同時(shí)被刪除,其他涉及該視圖的函數(shù)、視圖、程序等都將被視為非法。知識(shí)點(diǎn)3任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用1.序列在創(chuàng)建表時(shí),通常通過指定數(shù)據(jù)表的主鍵值來保證數(shù)據(jù)表的實(shí)體完整性。使用手工指定主鍵值這種方式,由于主鍵值不允許重復(fù),因此它要求操作人員在指定主鍵值時(shí)自動(dòng)判斷添加的值是否已經(jīng)存在,這明顯是不可取的。Oracle中提供了序列對(duì)象,序列表示自動(dòng)生成一個(gè)整數(shù)序列,主要用來自動(dòng)為表中的主鍵列提供有序的唯一值,這樣就可以避免在向表中添加數(shù)據(jù)時(shí)手工指定主鍵值。(1)創(chuàng)建序列序列與視圖一樣,并不占用實(shí)際的存儲(chǔ)空間,只是在數(shù)據(jù)字典中保存它的定義信息。在當(dāng)前用戶模式中創(chuàng)建序列時(shí),必須具有CREATE
SEQUENCE系統(tǒng)權(quán)限。要在其他模式中創(chuàng)建序列,必須具有CREATE
ANY
SEQUENCE系統(tǒng)權(quán)限。創(chuàng)建序列需要使用CREATE
SEQUENCE語句,其語法如下:CREATE
SEQUENCE
<sequence_name>[START
WITH
start_number][INCREMENT
BY
increment_number][MINVALUE
minvalue|NOMINVALUE][MAXVALUE
maxvalue|NOMAXVALUE][CHCHE
cache_number|NOCACHE][CYCLE|NOCYCLE][ORDER|NOORDER];知識(shí)點(diǎn)4任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用語法說明如下:①sequence_name:創(chuàng)建的序列名。②START
WITH
start_number:指定序列的起始值。如果序列是遞增的,則其默認(rèn)值為MINVALUE參數(shù)值;如果序列是遞減的,則其默認(rèn)值為MAXVALUE參數(shù)值。③INCREMENT
BY
increment_number:指定序列的增量。如果increment_number為正數(shù),則表示創(chuàng)建遞增序列,否則表示創(chuàng)建遞減序列,默認(rèn)值為1。④MINVALUE
minvalue|NOMINVALUE:指定序列最小整數(shù)值。如果指定為NOMINVALUE,則表示遞增序列的最小值為1,遞減序列的最小值為-1026,默認(rèn)為NOMINVALUE。⑤MAXVALUE
maxvalue|NOMAXVALUE:指定序列的最大整數(shù)值。如果指定為NOMAXVALUE,則表示遞增序列的最大值為1027,遞減序列的最大值為-1,默認(rèn)為NOMAXVALUE。⑥CHCHE
cache_number|NOCACHE:指定在內(nèi)存中預(yù)存儲(chǔ)的序列號(hào)的個(gè)數(shù)。默認(rèn)為20個(gè),最少為2個(gè)。⑦CYCLE|NOCYCLE:指定是否循環(huán)生成序列號(hào)。如果指定為CYCLE,表示循環(huán),當(dāng)遞增序列達(dá)到最大值時(shí),重新從最小值開始生成序列號(hào),當(dāng)遞減序列達(dá)到最小值后,重新從最大值開始生成序列號(hào),默認(rèn)為NOCYCLE。⑧ORDER|NOORDER:指定是否按照請(qǐng)求次序生成序列號(hào)。ORDER表示是,NOORDER表示否,默認(rèn)為NOORDER。知識(shí)點(diǎn)4任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用使用序列在使用序列之前,首先介紹序列中的兩個(gè)偽列,它們是:①CURRVAL:用于獲取序列的當(dāng)前值。使用形式為<sequence_name>.CURRVAL。必須在使用一次NEXTVAL之后才能使用此偽列。②NEXTVAL:用于獲取序列的下一個(gè)值。使用序列向表中的列自動(dòng)賦值時(shí),就是使用此偽列。使用形式為<sequence_name>.NEXTVAL。修改序列序列可以使用ALTER
SEQUENCE語句進(jìn)行修改,其他參數(shù)與CREATE
SEQUENCE語句相同。修改序列的參數(shù)必須要注意以下事項(xiàng):不能修改序列的起始值、序列的最小值不能大于當(dāng)前值、序列的最大值不能小于當(dāng)前值。刪除序列序列可以使用DROP
SEQUENCE語句刪除,其語法如下:DROP
SEQUENCE
sequence_name;知識(shí)點(diǎn)4任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用2.同義詞同義詞概述同義詞是表、索引等模式對(duì)象的一個(gè)別名。同義詞只是數(shù)據(jù)庫對(duì)象的一個(gè)替代名,在使用同義詞時(shí),Oracle會(huì)將其翻譯為對(duì)應(yīng)的對(duì)象名稱。同義詞只在數(shù)據(jù)字典中保存其定義描述,并不占用實(shí)際的存儲(chǔ)空間。在開發(fā)數(shù)據(jù)庫應(yīng)用程序時(shí),在代碼中應(yīng)盡量避免直接引用表、視圖的對(duì)象名稱,而使用這些對(duì)象的同義詞,這樣可以避免當(dāng)數(shù)據(jù)庫管理員對(duì)數(shù)據(jù)庫對(duì)象做出修改和變動(dòng)時(shí),必須重新編譯應(yīng)用程序。Oracle中同義詞分為兩類:①公有同義詞:在數(shù)據(jù)庫中的所有用戶都可以使用;②私有同義詞:由創(chuàng)建它的用戶私人擁有,但用戶可以控制其他用戶是否有權(quán)使用自己的同義詞。創(chuàng)建同義詞創(chuàng)建同義詞的語法如下:CREACE[PUBLIC
]SYNONYM
synonym_name
FOR
schema_object;語法說明如下:①PUBLIC:指定創(chuàng)建的同義詞是公有同義詞,如果無該選項(xiàng),則表示是私有同義詞。②synonym_name:創(chuàng)建的同義詞名稱。③schema_object:指定同義詞所代表的對(duì)象名。刪除同義詞刪除同義詞,需要使用DROP
SYNONYM語句。如果是刪除公有同義詞,還需要指定PUBLIC關(guān)鍵字。其語法如下:DROP
[PUBLIC]
SYNONYM
synonym_name;知識(shí)點(diǎn)4任務(wù)6Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對(duì)象的應(yīng)用子目錄任務(wù)6.1圖書銷售管理數(shù)據(jù)庫中索引的使用在圖書銷售管理系統(tǒng)中經(jīng)常要進(jìn)行數(shù)據(jù)查詢工作,如查詢指定供應(yīng)商供應(yīng)的圖書信息、查詢指定類別的圖書信息、統(tǒng)計(jì)圖書銷售情況等。為了提高數(shù)據(jù)的查詢效率,Oracle提供了索引對(duì)
象,以便實(shí)現(xiàn)快速數(shù)據(jù)查詢。子任務(wù)1創(chuàng)建圖書銷售管理數(shù)據(jù)庫的B樹索引子任務(wù)2創(chuàng)建圖書銷售管理數(shù)據(jù)庫的位圖索引子任務(wù)3創(chuàng)建圖書銷售管理數(shù)據(jù)庫的反向鍵索引和基于函數(shù)的索引子任務(wù)4圖書銷售管理數(shù)據(jù)庫的索引管理返回Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)Oracle數(shù)據(jù)庫系統(tǒng)提供了B樹索引,B樹索引是一種最常用的索引類型,適用于查詢列的值很少出現(xiàn)重復(fù)的情況,可以實(shí)現(xiàn)查詢數(shù)據(jù)的快速定位。在圖書銷售管理系統(tǒng)中經(jīng)常進(jìn)行供應(yīng)商信息查詢、出版社信息查詢、圖書信息查詢以及客戶信息查詢等。本任務(wù)根據(jù)圖書銷售管理系統(tǒng)的查詢功能需求,為圖書銷售管理數(shù)據(jù)庫的供應(yīng)商表suppliers、出版社表presses、圖書表books、客戶表clients建立B樹索引。任務(wù)分析任務(wù)6.1-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)創(chuàng)建圖書銷售管理數(shù)據(jù)庫的B樹索引1.為圖書銷售管理數(shù)據(jù)庫的供應(yīng)商表suppliers的供應(yīng)商名稱列建立B樹索引使用SQL
Plus工具連接到數(shù)據(jù)庫book,操作過程請(qǐng)參考任務(wù)二。如果當(dāng)前連接的不是
book數(shù)據(jù)庫,也可以在連接到默認(rèn)數(shù)據(jù)庫后,使用connect命令連接到指定的數(shù)據(jù)庫。在SQL
Plus編輯窗口中建立供應(yīng)商表的B樹索引,索引名稱為suppliername_idx,存儲(chǔ)到bookspace表空間,代碼如下:SQL>CREATE
INDEX
suppliername_idx
ON
suppliers(supplier_name)2TABLESPACE
BOOKSPACE;2.為圖書銷售管理數(shù)據(jù)庫的出版社表presses的出版社名稱列建立B樹索引連接到數(shù)據(jù)庫book。在SQL
Plus編輯窗口中輸入建立出版社表的B樹索引,索引名稱為pressname_idx,存儲(chǔ)到bookspace表空間的SQL語句,代碼如下:SQL>CREATE
INDEX
pressname_idx
ON
presses(press_name)
TABLESPACEBOOKSPACE;任務(wù)實(shí)施創(chuàng)建圖書銷售管理數(shù)據(jù)庫的B樹索引任務(wù)6.1-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)位圖索引適用于表中的列具有較小的基數(shù),在創(chuàng)建位圖索引時(shí),必須在語句中使用BITMAP關(guān)鍵字,同時(shí)位圖索引不能是唯一索引,也不能對(duì)其進(jìn)行鍵壓縮。圖書銷售管理系統(tǒng)中按類別查詢圖書信息,在圖書表中類別列的值占總記錄的百分比在1%左右,如果建立B樹索引,將大大降低數(shù)據(jù)查詢的效率,這種情況下必須要建立位圖索引。本任務(wù)為圖書表books建立位圖索引。任務(wù)分析創(chuàng)建圖書銷售管理數(shù)據(jù)庫的位圖索引任務(wù)6.1-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)連接到數(shù)據(jù)庫book。在SQL
Plus編輯窗口中輸入建立圖書表books位圖索引,索引名稱為typeid_bitmap,存儲(chǔ)到users表空間的SQL語句,代碼如下:SQL>CREATE
BITMAP
INDEX
typeid_bitmap
ON
books(type_id)TABLESPACE
users;索引已創(chuàng)建。小提示:在表上放置單獨(dú)的位圖索引是無意義的。例如,單獨(dú)在books表的type_id列創(chuàng)建位圖索引,如果使用該索引進(jìn)行查詢,則會(huì)返回表中大部分的行。因此,位圖索引的作用來源于與其他位圖索引的結(jié)合。這樣當(dāng)在多個(gè)列上進(jìn)行查詢時(shí),就可以對(duì)這些列上的位圖進(jìn)行布爾AND和OR運(yùn)算,最終找到所需要的結(jié)果。只有對(duì)多個(gè)列建立索引,用戶才能夠有效地利用它們。任務(wù)實(shí)施創(chuàng)建圖書銷售管理數(shù)據(jù)庫的位圖索引任務(wù)6.1-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)反向鍵索引適用于嚴(yán)格排序的列,鍵的反轉(zhuǎn)對(duì)用戶而言是完全透明的。用戶可以使用常規(guī)的方式查詢數(shù)據(jù),對(duì)鍵的反轉(zhuǎn)由系統(tǒng)自動(dòng)處理。在創(chuàng)建反向鍵索引時(shí),必須在創(chuàng)建索引的語句中指定關(guān)鍵字REVERSE。創(chuàng)建基于函數(shù)的索引,可以提高當(dāng)在查詢條件中使用函數(shù)和表達(dá)式時(shí)查詢的執(zhí)行效率,在創(chuàng)建基于函數(shù)的索引時(shí),Oracle首先會(huì)對(duì)包含索引列的函數(shù)或表達(dá)式進(jìn)行求值,然后對(duì)求值后的結(jié)果進(jìn)行排序,最后再存儲(chǔ)到索引中。在創(chuàng)建基于函數(shù)的索引時(shí),既可以是普通的B樹索引,也可以是位圖索引。同時(shí)在創(chuàng)建基于函數(shù)的索引時(shí),不僅可以使用SQL函數(shù),也可以使用用戶自定義函數(shù)。圖書銷售管理系統(tǒng)中,有時(shí)會(huì)按書號(hào)來查詢圖書信息或圖書銷售信息,為提高查詢效率,可以在該列建立反向鍵索引。在圖書銷售管理系統(tǒng)中,查詢某年購(gòu)入的圖書信息或銷售的圖書信息,要使用函數(shù)to_char函數(shù)提取入庫日期或銷售日期的年份進(jìn)行比較,則可以在圖書入庫日期或銷售日期列建立基于函數(shù)的索引。本任務(wù)對(duì)圖書銷售單表saleorders的書號(hào)列建立反向鍵索引,對(duì)入庫單表entryorders和銷售單表saleorders建立基于函數(shù)的索引。任務(wù)分析創(chuàng)建圖書銷售管理數(shù)據(jù)庫的反向鍵索引和基于函數(shù)的索引任務(wù)6.1-子任務(wù)3Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)1.為圖書銷售單表saleorders的書號(hào)(book_id)列建立反向鍵索引。連接到數(shù)據(jù)庫book。在SQL
Plus編輯窗口輸入建立圖書銷售單表的反向鍵索引,索引名稱為
saleorder_bookid_idx,存儲(chǔ)到表空間users中的SQL語句,代碼如下:SQL>CREATE
INDEX
saleorder_bookid_idx
ON
saleorders(book_id)
REVERSETABLESPACE
users;索引已創(chuàng)建。2.為圖書入庫單表entryorders的入庫日期(entry_date)列建立基于函數(shù)的索引。連接到數(shù)據(jù)庫book。在SQL
Plus編輯窗口建立輸入圖書入庫單表基于函數(shù)的索引,索引名稱為
entryorder_date_idx,存儲(chǔ)到表空間users中的SQL語句,代碼如下:SQL>CREATE
INDEX
entryorder_date_idx2ON
entryorders(TO_CHAR(entry_date,′YYYY′))TABLESPACE
users;索引已創(chuàng)建。3.為圖書銷售單表saleorders的銷售日期列(sale_date)建立基于函數(shù)的索引,索引名稱為saleorder_date_idx,存儲(chǔ)到表空間users中,代碼參考為圖書入庫單建立基于函數(shù)的索引。任務(wù)實(shí)施創(chuàng)建圖書銷售管理數(shù)據(jù)庫的反向鍵索引和基于函數(shù)的索引任務(wù)6.1-子任務(wù)3Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)索引管理除了創(chuàng)建索引之外,還可以進(jìn)行合并索引、重建索引和刪除索引。在圖書銷售管理系統(tǒng)中經(jīng)常對(duì)各個(gè)表進(jìn)行更新操作,這樣在表的索引中會(huì)產(chǎn)生越來越多的存儲(chǔ)碎片,從而影響索引的工作效率,用戶可以通過合并索引和重建索引的方法來解決這個(gè)問題。修改索引的語句為ALTERINDEX.本任務(wù)對(duì)圖書銷售管理數(shù)據(jù)庫建立的索引進(jìn)行合并、重建和刪除。任務(wù)分析圖書銷售管理數(shù)據(jù)庫的索引管理任務(wù)6.1-子任務(wù)4Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)任務(wù)實(shí)施圖書銷售管理數(shù)據(jù)庫的索引管理1.合并圖書銷售管理數(shù)據(jù)庫中圖書表books的索引bookname_idx合并索引只是簡(jiǎn)單地把B樹索引的葉子節(jié)點(diǎn)中的存儲(chǔ)碎片合并在一起,并不會(huì)改變物理組織結(jié)構(gòu),所以執(zhí)行合并索引操作的代價(jià)較小。語法格式為:ALTER
INDEX
indexname
COALESCE(1)連接到book數(shù)據(jù)庫。(2)在SQL
Plus編輯窗口輸入合并圖書銷售管理數(shù)據(jù)庫的索引bookname_idx的SQL語句,代碼如下:SQL>ALTER
INDEX
bookname_idx
COALESCE;索引已更改。2.重建圖書銷售管理數(shù)據(jù)庫中出版社表presses的索引pressname_idx重建索引是在指定的表空間中刪除原來的索引,再重新建立一個(gè)索引,執(zhí)行重建索引操作的代價(jià)較大。語法格式為:ALTER
INDEX
indexname
REBUILD連接到book數(shù)據(jù)庫。在SQL
Plus編輯窗口輸入重建圖書銷售管理數(shù)據(jù)庫的索引pressname_idx的SQL語句,代碼如下:SQL>ALTER
INDEX
pressname_idxREBUILD;索引已更改。任務(wù)6.1-子任務(wù)4Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)3.把圖書銷售管理數(shù)據(jù)庫中出版社表suppliers中的索引suppliername_idx刪除語法格式為:DROP
INDEX
[schema.]indexname
[FORCE]語法說明:①schema:包含索引的模式;②index_name:索引的名稱;③FORCE:強(qiáng)制刪除,即使索引類型程序調(diào)用返回錯(cuò)誤或者索引被標(biāo)記為處理中,該索引同樣被刪除。連接到book數(shù)據(jù)庫。在SQL
Plus編輯窗口輸入刪除圖書銷售管理數(shù)據(jù)庫的索引suppliername_idx的SQL語句,代碼如下:SQL>DROP
INDEX
suppliername_idx;索引已刪除。說明:若要?jiǎng)h除與主鍵或唯一鍵約束相關(guān)的索引,必須先刪除這些約束。任務(wù)實(shí)施圖書銷售管理數(shù)據(jù)庫的索引管理任務(wù)6.1-子任務(wù)4Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)子目錄任務(wù)6.2圖書銷售管理數(shù)據(jù)庫中外部表的應(yīng)用在圖書銷售管理系統(tǒng)中,經(jīng)常接收到供應(yīng)商或出版社的圖書信息,接收到的信息大部分都是Excel文件,那么在系統(tǒng)中如何導(dǎo)入或應(yīng)用這些外部的數(shù)據(jù)就提到了用戶的面前。Oracle提供了外部表來實(shí)現(xiàn)這項(xiàng)功能。外部表是引用數(shù)據(jù)庫之外的文件系統(tǒng)中存儲(chǔ)數(shù)據(jù)的一種只讀表,外部表所要讀取的數(shù)據(jù)存儲(chǔ)在Oracle數(shù)據(jù)庫外部的文件中,如文本文件、Excel文件,并且只能讀取外部文件中的數(shù)據(jù),不能進(jìn)行數(shù)據(jù)的寫入。使用外部表無需將數(shù)據(jù)復(fù)制到數(shù)據(jù)庫中,可以讓數(shù)據(jù)保留在普通的文件中,并且允許數(shù)據(jù)庫對(duì)其進(jìn)行實(shí)時(shí)讀取。子任務(wù)1讀取文本文件中的數(shù)據(jù)子任務(wù)2讀取Excel文件中的數(shù)據(jù)返回Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)使用Oracle的外部表,可以將一個(gè)格式化的文本文件或Excel文件等虛擬成數(shù)據(jù)庫的表,并且可以使用Select語句進(jìn)行訪問表中的數(shù)據(jù)。Oracle讀取外部文件,必須要?jiǎng)?chuàng)建目錄對(duì)象和外部表,然后通過SQL語句讀取外部表鏈接的外部文件中的數(shù)據(jù)。1.創(chuàng)建目錄對(duì)象在Oracle中創(chuàng)建目錄對(duì)象用來指向外部文件所存放的磁盤文件夾。創(chuàng)建目錄對(duì)象登錄用戶必須具有CREATEANYDIRECTORY權(quán)限?;靖袷饺缦拢篊REATE
DIRECTORYexterior_data
as磁盤路徑任務(wù)分析讀取文本文件中的數(shù)據(jù)任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)2.創(chuàng)建外部表創(chuàng)建外部表,仍使用CREATE
TABLE語句,并添加ORGANIZATION
EXTERNAL子句。格式如下:CREATE
TABLEtable_name(……)ORGANIZATION
EXTERNAL(TYPE
driver_interfaceDEFAULT
DIRECTORYdirectory_objectLOCATION(′filename′)ACCESS
PARAMETERS(Fields
terminated
by
′separative_sign
′));ORGANIZATION
EXTERNAL子句選項(xiàng)說明如下:(1)TYPE:用來指定訪問外部表數(shù)據(jù)文件時(shí)所應(yīng)用的訪問驅(qū)動(dòng)程序,該程序可以將數(shù)據(jù)從它們最初的格式轉(zhuǎn)為可以向服務(wù)器提供的格式,默認(rèn)訪問驅(qū)動(dòng)程序是ORACLE_LOADER。任務(wù)分析讀取文本文件中的數(shù)據(jù)任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)DEFAULT
DIRECTORY:用來指定所使用的目錄對(duì)象,該目錄對(duì)象指向外部數(shù)據(jù)文件所在目錄。LOCATION:用來指定源數(shù)據(jù)文件名稱。ACCESS
PARAMETERS:用來設(shè)置訪問驅(qū)動(dòng)程序進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換時(shí)的參數(shù)。FIELDS
TERMINATED
BY:用來指定字段之間的分隔符。小提示:在創(chuàng)建外部表時(shí),表中的字段數(shù)量、各個(gè)字段的數(shù)據(jù)類型必須與外部文件的數(shù)據(jù)格式一致,并且不能為表中的字段指定主鍵約束、唯一約束和空值約束等。3.外部表錯(cuò)誤的處理在將外部文件中的數(shù)據(jù)轉(zhuǎn)換為外部表時(shí),源數(shù)據(jù)文件中的數(shù)據(jù)類型轉(zhuǎn)換為表定義的數(shù)據(jù)類型時(shí),有可能會(huì)出現(xiàn)錯(cuò)誤,如指定的分隔符不符合要求,這會(huì)導(dǎo)致數(shù)據(jù)類型轉(zhuǎn)換出錯(cuò)。在創(chuàng)建外部表時(shí),可以指定一些子句來對(duì)錯(cuò)誤進(jìn)行處理。關(guān)于錯(cuò)誤的子句主要包括REJECT
LIMIT、BADFILE和LOGFILE。任務(wù)分析讀取文本文件中的數(shù)據(jù)任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)REJECT
LIMIT子句在創(chuàng)建外部表時(shí),如果使用REJECTLIMIT子句,可以指定在數(shù)據(jù)類型轉(zhuǎn)換期間允許出現(xiàn)的錯(cuò)誤個(gè)數(shù)。默認(rèn)情況下,REJECT
LIMIT子句指定的數(shù)值為0,即不允許錯(cuò)誤發(fā)生。可以在使用REJECTLIMIT子句時(shí)設(shè)置允許出現(xiàn)的錯(cuò)誤數(shù)為UNLIMITED,則在查詢時(shí)不會(huì)出現(xiàn)失敗。如果外部數(shù)據(jù)文件中的所有記錄都由于轉(zhuǎn)換錯(cuò)誤而失敗,那么查詢結(jié)果將返回0行,即“未選定行”。BADFILE和NOBADFILE子句如果在創(chuàng)建外部表時(shí)使用BADFILE子句,則將所有不能轉(zhuǎn)換的數(shù)值都寫入到BADFILE子句指定的文件中。如果在創(chuàng)建外部表時(shí)使用了NOBADFILE子句時(shí),Oracle將忽略數(shù)據(jù)類型轉(zhuǎn)換錯(cuò)誤。如果用戶在創(chuàng)建表時(shí)沒有規(guī)定BADFILE和NOBADFILE子句,默認(rèn)情況下,Oracle將自動(dòng)建立一個(gè)名稱與外部表相同,但擴(kuò)展名為.bad的文件,并且該文件與數(shù)據(jù)文件位于同一個(gè)目錄中。LOGFILE和NOLOGFILE子句在建立外部表時(shí)經(jīng)常會(huì)發(fā)生錯(cuò)誤,如操作系統(tǒng)限制Oracle讀取文件、數(shù)據(jù)文件不存在。當(dāng)發(fā)生錯(cuò)誤時(shí),Oracle將在日志文件中記錄這些錯(cuò)誤。LOGFILE子句用來指定一個(gè)記錄錯(cuò)誤信息的日志文件,NOLOGFILE子句則不會(huì)將錯(cuò)誤信息寫入任何日志文件中。在創(chuàng)建外部表時(shí)如果沒有規(guī)定LOGFILE或NOLOGFILE,則Oracle將會(huì)默認(rèn)建立一個(gè)LOGFILE文件,該文件的名稱與外部表相同,擴(kuò)展名為.log,該文件與數(shù)據(jù)文件位于同一個(gè)目錄中。任務(wù)分析讀取文本文件中的數(shù)據(jù)任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)4.外部表的局限性外部表只能用于查詢,不能寫入數(shù)據(jù)。外部表在讀取外部文件中的數(shù)據(jù)時(shí),其實(shí)數(shù)據(jù)并沒有存放到Oracle數(shù)據(jù)庫,仍然存放在外部數(shù)據(jù)文件中,因此外部表是只讀的,只能夠用于查詢數(shù)據(jù)。Oracle沒有提供相應(yīng)的方法去更新或刪除這些表中的記錄,當(dāng)需要對(duì)外部表中的數(shù)據(jù)進(jìn)行修改時(shí),只能通過直接修改數(shù)據(jù)文件實(shí)現(xiàn)。外部表不能建立索引Oracle不能在外部表上建立索引,這就表明在每次使用SELECT查詢表時(shí),Oracle都需要進(jìn)行完全搜索外部表,當(dāng)表比較大時(shí),將嚴(yán)重影響查詢的執(zhí)行效率。本任務(wù)使用Oracle的外部表讀取供應(yīng)商提供格式化的文本文件圖書信息,基本步驟是建立格式化的文本文件、建立Oracle外部表文件結(jié)構(gòu)和使用Select語句讀取外部表文件。任務(wù)分析讀取文本文件中的數(shù)據(jù)任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)創(chuàng)建或取得供應(yīng)商提供的格式化文本文件圖書信息,分隔符為逗號(hào),文件名為books.txt,保存在“D:\\exterior”文件夾中。如圖6-3所示。小提示:外部文件可以是文本文件,也可以是Excel文件,但要注意必須是格式化的文件,尤其是各字段的值不要出現(xiàn)分隔符字符。創(chuàng)建目錄對(duì)象,指向文本文件所存放的磁盤文件夾,在SQL
Plus界面中輸入如下代碼:
SQL>CREATE
DIRECTORY
exterior_data
AS′D:\exterior′;任務(wù)實(shí)施讀取文本文件中的數(shù)據(jù)圖6-3圖書信息文本文件books.txt數(shù)據(jù)內(nèi)容任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)3.針對(duì)上述所建立的圖書信息文本文件和目錄對(duì)象,創(chuàng)建Oracle外部表,表名為
“exterior_books”,在SQL
Plus界面中輸入如下代碼:SQL>CREATE
TABLE
exterior_books2(book_idVARCHAR2(10)3,book_isbnVARCHAR2(20)4,book_nameVARCHAR2(100)5,type_idVARCHAR2(4)6,book_authorVARCHAR2(100)7,book_formatVARCHAR2(10)8,book_frameVARCHAR2(10)9,book_editionVARCHAR2(10)10,book_pageCountINTEGER11,book_numINTEGER任務(wù)實(shí)施讀取文本文件中的數(shù)據(jù)12,book_priceNUMBER(7,2)13,press_idVARCHAR2(6)14)15ORGANIZATION
EXTERNAL16(17TYPE
oracle_loader18DEFAULT
DIRECTORY
exterior_data19ACCESS
PARAMETERS(fields
terminatedby
′,′)20LOCATION(′books.txt′)21)22REJECT
LIMIT
UNLIMITED;表已創(chuàng)建。任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)4.在Oracle
Enterprise
Manager管理器的SQL工作表中使用SELECT語句查詢外部表
exterior_books的數(shù)據(jù),如圖6-4所示。任務(wù)實(shí)施讀取文本文件中的數(shù)據(jù)圖6-4查詢exterior_books外部表數(shù)據(jù)任務(wù)6.2-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)使用Oracle的外部表,不僅可以讀取格式化的文本文件,還可以讀取Excel文件,并使用SELECT語句進(jìn)行表中數(shù)據(jù)的訪問。本任務(wù)是讀取保存在Excel文件中的客戶信息數(shù)據(jù),并將其添加到基本表clients中。任務(wù)分析讀取Excel文件中的數(shù)據(jù)任務(wù)6.2-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)創(chuàng)建或取得供應(yīng)商提供的Excel格式文件圖書信息,文件名為clients.csv,保存在
“D:\exterior”文件夾中。該類型的文件可以被Excel軟件使用,如圖6-5所示。創(chuàng)建目錄對(duì)象,如果存在目錄對(duì)象,則不必建立。代碼如下:
Create
directory
exterior_dataas′D:\data′任務(wù)實(shí)施讀取Excel文件中的數(shù)據(jù)圖6-5
clients.csv文件中的數(shù)據(jù)內(nèi)容任務(wù)6.2-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)任務(wù)實(shí)施讀取Excel文件中的數(shù)據(jù)3.針對(duì)上述所提供的圖書信息Excel文件和目錄對(duì)象,創(chuàng)建Oracle外部表,表名為
“exterior_clients”,在Oracle
Enterprise
Manager管理器的SQL工作表中或SQL
Plus界面輸入代碼如下:SQL>CREATE
TABLE
exterior_clients10TYPE
oracle_loader2(client_idVARCHAR2(10)11DEFAULT
DIRECTORY
exterior_data3,client_nameVARCHAR2(30)12ACCESS
PARAMETERS(fields
terminated4,client_addressVARCHAR2(100)by
′,′)5,client_phoneVARCHAR2(20)13LOCATION(′clients.csv′)6,client_emailVARCHAR2(30)14)7)15REJECT
LIMIT
UNLIMITED;8organization
external表已創(chuàng)建。9(任務(wù)6.2-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)在OracleEnterprise
Manager管理器的SQL工作表中使用SELECT語句查詢外部表exterior_clients的數(shù)據(jù),如圖6-6所示。使用INSERT語句將外部表
exterior_clients讀取的數(shù)據(jù)追加到基本表
clients中。代碼如下:SQL>INSERT
INTOclients
SELECT
*FROMexterior_clients;任務(wù)實(shí)施讀取Excel文件中的數(shù)據(jù)圖6-6查詢exterior_clients外部表數(shù)據(jù)任務(wù)6.2-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)根據(jù)圖書銷售管理系統(tǒng)的功能以及用戶對(duì)圖書銷售管理系統(tǒng)軟件的數(shù)據(jù)需求,如果全部創(chuàng)建基本表(堆表)將不能滿足用戶快速查詢數(shù)據(jù)和存儲(chǔ)大量數(shù)據(jù)的要求,Oracle提供了索引組織
表和分區(qū)表來實(shí)現(xiàn)用戶的大數(shù)據(jù)量需求。子目錄任務(wù)6.3圖書銷售管理數(shù)據(jù)庫中索引組織表和分區(qū)表的應(yīng)用子任務(wù)1建立存儲(chǔ)客戶信息的索引組織表子任務(wù)2建立存儲(chǔ)圖書銷售信息數(shù)據(jù)的分區(qū)表返回Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)索引組織表為精確匹配和范圍搜索的數(shù)據(jù)查詢提供了快速訪問。索引組織表不僅存放數(shù)據(jù),而且存放索引數(shù)據(jù)。本任務(wù)是為圖書銷售管理數(shù)據(jù)庫建立存儲(chǔ)客戶信息的索引組織表client_tableindex。任務(wù)分析建立存儲(chǔ)客戶信息的索引組織表任務(wù)6.3-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)連接到數(shù)據(jù)庫book。在SQL
Plus界面輸入為圖書銷售管理數(shù)據(jù)庫建立存儲(chǔ)客戶信息的索引組織表
clients_tableindex的SQL語句,代碼如下:SQL>CREATE
TABLE
clients_tableindex2(client_idVARCHAR2(10)
PRIMARY
KEY3,client_nameVARCHAR2(30)
NOT
NULL4,client_addressVARCHAR2(100)5,client_phoneVARCHAR2(20)6,client_emailVARCHAR2(30)7)8ORGANIZATION
INDEX9;注意:建立索引組織表在語句中必須要添加ORGANIZATION
INDEX選項(xiàng)。任務(wù)實(shí)施建立存儲(chǔ)客戶信息的索引組織表任務(wù)6.3-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)圖書銷售管理系統(tǒng)中存儲(chǔ)著大量的圖書銷售信息數(shù)據(jù),當(dāng)圖書銷售信息的存儲(chǔ)容量大于幾GB或者更多時(shí),為了提高數(shù)據(jù)的讀寫和查詢速度,Oracle提供了分區(qū)表技術(shù)來實(shí)現(xiàn)。本任務(wù)是為圖書銷售管理數(shù)據(jù)庫建立存儲(chǔ)圖書信息的分區(qū)表saleorders_part,分區(qū)表按銷售日期進(jìn)行分區(qū)。任務(wù)分析建立存儲(chǔ)圖書銷售信息數(shù)據(jù)的分區(qū)表任務(wù)6.3-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)連接到數(shù)據(jù)庫book。在SQL
Plus界面輸入SQL語句,為圖書銷售管理數(shù)據(jù)庫創(chuàng)建銷售單的范圍分區(qū)表
saleorders_part,要求2010年以前的記錄存放到mypart1分區(qū),2010~2012年的記錄存放到
mypart2分區(qū),其他記錄保存在mypart3分區(qū),存儲(chǔ)到表空間bookspace中。代碼如下:SQL>CREATE
TABLE
saleorders_part2(saleorder_idVARCHAR2(10)3,book_idVARCHAR2(10)
REFERENCES
books(book_id)
ON
DELETE
CASCADE4,sale_dateDATE5,book_numINTEGER6,book_priceNUMBER(7,2)7,client_idVARCHAR2(10)8,emp_idVARCHAR2(10)9,PRIMARY
KEY(saleorder_id,book_id)任務(wù)實(shí)施建立存儲(chǔ)圖書銷售信息數(shù)據(jù)的分區(qū)表任務(wù)6.3-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)1月
2010′)
TABLESPACE1月
2012′)
TABLESPACE10)11PARTITION
BY
RANGE(sale_date)12(13PARTITION
mypart1
VALUES
LESS
THAN(′01bookspace,14PARTITION
mypart2
VALUES
LESS
THAN(′01bookspace,15PARTITION
mypart3
VALUES
LESS
THAN(MAXVALUE)
TABLESPACE
bookspace16);表已創(chuàng)建。說明:在創(chuàng)建分區(qū)表前,必須保證當(dāng)前數(shù)據(jù)庫已經(jīng)存在的表空間,以便于將不同的分區(qū)指定到不同的表空間中。任務(wù)實(shí)施建立存儲(chǔ)圖書銷售信息數(shù)據(jù)的分區(qū)表任務(wù)6.3-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)子目錄任務(wù)6.4創(chuàng)建圖書銷售管理數(shù)據(jù)庫的視圖查詢是管理信息系統(tǒng)必備的功能之一。圖書銷售管理系統(tǒng)中經(jīng)常要用到對(duì)數(shù)據(jù)進(jìn)行查詢,在查詢過程中會(huì)使用一個(gè)數(shù)據(jù)表或多個(gè)數(shù)據(jù)表。例如在供應(yīng)商管理子系統(tǒng)中包括對(duì)供應(yīng)商信息的查詢,可以按供應(yīng)商號(hào)或供應(yīng)商名完成查詢。在圖書信息管理子系統(tǒng)中包括對(duì)圖書綜合信息的查詢,如查詢圖書信息以及出版社和供應(yīng)商信息等,這樣就用到了多個(gè)基本表,表與表之間必須要建立連接,因而書寫查詢語句較為復(fù)雜,程序代碼也會(huì)增加復(fù)雜度。Oracle提供了視圖對(duì)象來解決這個(gè)問題,視圖是從一個(gè)或多個(gè)表中導(dǎo)出的虛擬表,視圖建立后可多次使用,同時(shí)視圖限制了用戶直接訪問基本表的數(shù)據(jù),保證了數(shù)據(jù)的安全性和可靠性。子任務(wù)1建立查詢圖書采購(gòu)情況的視圖子任務(wù)1建立查詢圖書采購(gòu)情況的視圖子任務(wù)2建立綜合查詢圖書信息的視圖子任務(wù)3建立查詢圖書銷售情況的視圖返回Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)根據(jù)圖書銷售管理系統(tǒng)的功能需求,用戶查詢圖書采購(gòu)的圖書信息,對(duì)應(yīng)的SELECT查詢命令是:SELECT
book_name
AS圖書名稱,book_isbn
AS標(biāo)準(zhǔn)書號(hào),book_author
AS作者,entry_number
AS入庫數(shù)量,entry_date
AS入庫日期,supplier_name
AS供應(yīng)商名稱FROM
suppliers,books,entryordersWHERE
suppliers.supplier_id=entryorders.supplier_id
ANDentryorders.book_id=book.book_id;上述查詢命令中用到了供應(yīng)商表、入庫單表和圖書表。由于查詢涉及多個(gè)數(shù)據(jù)表,則必須要建立表與表之間的聯(lián)系,這樣無疑增加了書寫查詢語句的復(fù)雜性。本任務(wù)建立一個(gè)視圖suppliers_view,用于查詢圖書采購(gòu)的情況。任務(wù)分析建立查詢圖書采購(gòu)情況的視圖任務(wù)6.4-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)1.建立查詢供應(yīng)商供應(yīng)圖書的視圖,視圖名稱為suppliers_view,要求查詢供應(yīng)商名稱、書名、標(biāo)準(zhǔn)書號(hào)、作者、入庫數(shù)量和入庫日期信息,并要求創(chuàng)建的視圖為只讀。連接到數(shù)據(jù)庫book。在SQL
Plus窗口中輸入創(chuàng)建視圖suppliers_view的SQL語句,代碼如下:
SQL>CREATE
VIEW
suppliers_view(圖書名稱,標(biāo)準(zhǔn)書號(hào),作者,入庫數(shù)量,入庫日期,供應(yīng)商名稱)2AS3SELECT
book_name,book_isbn,book_author,entry_number,entry_dat,supplier_name4FROM
suppliers,books,entryorders5WHERE
suppliers.supplier_id=entryorders.supplier_id
AND
entryorders.book_id=6books.book_id;任務(wù)實(shí)施建立查詢圖書采購(gòu)情況的視圖任務(wù)6.4-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)2.利用視圖suppliers_view查詢從“大連新華書店”購(gòu)入的圖書信息,并按入庫日期升序排序,代碼如下:SQL>SELECT
*
FROMsuppliers_view2WHERE供應(yīng)商名稱=′大連新華書店′3ORDER
BY入庫日期ASC;從上述查詢命令中可以看出,當(dāng)從視圖中查詢數(shù)據(jù)時(shí),則不必重復(fù)建立數(shù)據(jù)表之間的聯(lián)系,只需添加必要的查詢條件,另外通過suppliers_view視圖不僅可以按供應(yīng)商名查詢,也可以按入庫日期查詢指定日期或日期范圍內(nèi)所采購(gòu)的圖書信息。小提示:在上述代碼條件中不能使用supplier_name列名,而使用在定義視圖時(shí)指定的supplier_name字段的別名,即供應(yīng)商名稱。另外在建立視圖時(shí)不允許使用排序子句,如果要排序則應(yīng)在使用視圖查詢時(shí)再指定ORDER
BY子句。任務(wù)實(shí)施建立查詢圖書采購(gòu)情況的視圖任務(wù)6.4-子任務(wù)1Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)在圖書銷售系統(tǒng)的圖書信息管理子系統(tǒng)中,可以實(shí)現(xiàn)多種方式綜合查詢圖書信息,例如查詢某出版社出版的圖書信息、查詢某類別的圖書信息、查詢某作者編寫的圖書信息等。本任務(wù)建立一個(gè)通用的圖書信息查詢視圖,用于實(shí)現(xiàn)多種方式綜合查詢圖書信息,視圖名稱為books_view。任務(wù)分析建立綜合查詢圖書信息的視圖任務(wù)6.4-子任務(wù)2Oracle數(shù)據(jù)庫應(yīng)用技術(shù)項(xiàng)目化教程(第二版)1.建立綜合查詢圖書信息的視圖,視圖名稱為books_view,要求視圖中包含書號(hào)、圖書名稱、作者、類別名稱、開本、版次、出版日期、圖書單價(jià)、庫存數(shù)量、出版社名稱等信息。連接到book數(shù)據(jù)庫。在SQL
Plus界面中輸入建立綜合查詢圖書信息的SQL語句,代碼如下:SQL>CREATE
VIEW
books_view(書號(hào),圖書名稱,作者,類別名稱,開本,版次,出版日期,圖書單價(jià),庫存數(shù)量,出版社名稱)ASSELECT
book_id,book_name,book_author,type_name,book_format,book_edition,book_date,book_pri
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司股份合作協(xié)議書范本10篇
- 全國(guó)賽課一等獎(jiǎng)初中統(tǒng)編版七年級(jí)道德與法治上冊(cè)《樹立正確的人生目標(biāo)》課件
- 2023年胺類項(xiàng)目融資計(jì)劃書
- 《基本透視原理》課件
- 養(yǎng)老院老人生活設(shè)施維護(hù)制度
- 養(yǎng)老院老人財(cái)務(wù)管理制度
- 旅行社酒店入住合同(2篇)
- 《報(bào)價(jià)回購(gòu)經(jīng)驗(yàn)分享》課件
- 2024年度演出器材租賃免責(zé)協(xié)議書下載3篇
- 中小學(xué)教師多媒體課件制作培訓(xùn)流程
- 水泥混凝土路面施工方案85171
- 建筑電氣施工圖(1)課件
- 質(zhì)量管理體系運(yùn)行獎(jiǎng)懲考核辦法課案
- 泰康人壽養(yǎng)老社區(qū)介紹課件
- T∕CSTM 00584-2022 建筑用晶體硅光伏屋面瓦
- 2020春國(guó)家開放大學(xué)《應(yīng)用寫作》形考任務(wù)1-6參考答案
- 國(guó)家開放大學(xué)實(shí)驗(yàn)學(xué)院生活中的法律第二單元測(cè)驗(yàn)答案
- CAMDS操作方法及使用技巧
- Zarit照顧者負(fù)擔(dān)量表
- 2021年全國(guó)質(zhì)量獎(jiǎng)現(xiàn)場(chǎng)匯報(bào)材料-財(cái)務(wù)資源、財(cái)務(wù)管理過程及結(jié)果課件
- 5F營(yíng)銷工業(yè)化模式(194張)課件
評(píng)論
0/150
提交評(píng)論