版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1任務6圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用預備知識任務6.1圖書銷售管理數(shù)據(jù)庫中索引的使用任務6.2圖書銷售管理數(shù)據(jù)庫中外部表的應用任務6.3圖書銷售管理數(shù)據(jù)庫中索引組織表和分區(qū)表的應用任務6.4創(chuàng)建圖書銷售管理數(shù)據(jù)庫的視圖任務6.5圖書銷售管理數(shù)據(jù)庫中序列和同義詞的應用任務實訓學生管理系統(tǒng)數(shù)據(jù)的導出和導入Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)掌握索引的概念、分類、作用以及索引的創(chuàng)建、重建與合并掌握外部數(shù)據(jù)文件的讀取和錯誤處理方法掌握索引組織表和分區(qū)表的創(chuàng)建與管理掌握視圖的概念以及視圖的創(chuàng)建和使用了解序列和同義詞的含義和功能學習目標任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用預備知識返回任務6圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用知識點1索引知識點2索引組織表和分區(qū)表知識點3視圖知識點4序列和同義詞Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)知識點11.索引概述在Oracle中,索引是數(shù)據(jù)庫中用于存放表中每一條記錄位置的一種模式對象,索引主要用于提高表的查詢速度。索引與表一樣,有獨立的數(shù)據(jù)段存儲,并且可以通過設置存儲參數(shù),控制索引段的盤區(qū)分配方式。索引的作用相當于圖書的目錄,例如要在一本書中找到有關某方面的知識時,可以采取兩種方法,一種方法是從書的開頭逐頁翻閱,一直到尾,這樣需要翻閱全書才能找到所需要的知識。另一種方法是從書的索引目錄中查找所需要的知識主題,然后再根據(jù)目錄中的頁碼找到所需的知識內容。非常明顯,采用第二種方法要比第一種快。同樣道理,如果一個表中包含很多記錄,當對表執(zhí)行查詢時,第一種方法須將所有的記錄全部取出,把每一條記錄與查詢條件進行比較,然后返回滿足條件的記錄。這種搜索信息的方式稱為全表搜索,全表搜索會消耗大量的數(shù)據(jù)庫系統(tǒng)資源,并造成大量的I/O操作。第二種方法是通過在表中建立類似于目錄的索引,然后在索引中找到符合查詢條件的索引值,最后就可以通過保存在索引中的ROWID快速找到表中對應的記錄,這就是索引的作用。在數(shù)據(jù)庫中使用索引是以占用磁盤空間和消耗系統(tǒng)資源為代價的,創(chuàng)建索引需要占用大量存儲空間,同時再向表中添加、更新或刪除記錄時,數(shù)據(jù)庫需要花費額外的開銷來維護和更新索引。任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用小提示:Oracle數(shù)據(jù)庫內部使用ROWID來存儲表中數(shù)據(jù)行的物理位置。使用索引查詢數(shù)據(jù)時,首先通過索引列的值查詢到ROWID,然后通過ROWID找到記錄的物理地址。采用B樹索引可以確保Oracle只需要花費相同的I/O就可以獲得要查詢的索引條目。例如,采用B樹索引查詢編號為1020的結點,其查詢過程如下:①訪問根結點,將1020與1011與1013進行比較。②因為1020大于1013,所以接著搜索右子樹,在右子樹中將1020再與1013、1017和1021進行比較。③由于1020大于1017但是小于1021,所以搜索右子樹的第二結點,并找到要查詢的索引條目。(2)位圖索引位圖索引與B樹索引不同,在B樹索引中,通過在索引中保存排過序的索引列的值與相對應記錄的ROWID來實現(xiàn)快速查找,但是對于一些特殊的表,B樹索引的效率可能會很低。例如,在圖書銷售管理數(shù)據(jù)庫的客戶信息表clients中的客戶性別(client_sex)列,它只有兩個取值:“男”或“女”。如果在該列上創(chuàng)建B樹索引,那么創(chuàng)建的B樹只有兩個分支,使用該索引對客戶信息進行檢索時,將返回接近一半的記錄,這樣也就失去了索引的基本作用。所以,當一個列的所有取值數(shù)量與行的總數(shù)的比例小于1%時,那么該列不再適合建立B樹索引,而適用建立位圖索引。(3)反向鍵索引在Oracle中,系統(tǒng)會自動為表的主鍵列建立索引,這個索引是普通的B樹索引。對于主鍵值是按順序添加的情況,默認的B樹索引并不理想,這是因為如果索引列的值具有嚴格順序,隨著數(shù)據(jù)行的插入,索引樹的層級就會增長很快。搜索索引發(fā)生的I/O讀寫次數(shù)和索引樹的層級數(shù)成正比,也就是說,一棵具有5個層級的B樹索引,在最終讀到索引數(shù)據(jù)時,最多可能發(fā)生多達5次I/O操作。另外,由于B樹索引是以嚴格有序的方式將索引數(shù)值插入的,那么B樹索引將變成一棵不對稱的“歪樹”。反向鍵索引是一種特殊類型的B樹索引,在索引基于含有有序數(shù)的列時非常有用。反向鍵索引的工作原理在存儲結構方面與普通的B樹索引相同。然而,如果用戶使用序列編號在表中輸入新的記錄,則反向鍵索引首先反向每個列鍵值的字節(jié),然后在反向后的新數(shù)據(jù)上進行索引。例如,如果用戶輸入索引鍵為2008,就反向轉換為8002進行索引,2015就反向轉換為5102進行索引。知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用(4)基于函數(shù)的索引基于函數(shù)的索引其實也是B樹索引,不過基于函數(shù)的索引存放是經過函數(shù)處理后得到的數(shù)據(jù),而不存放數(shù)據(jù)本身。如果檢索的數(shù)據(jù)需要對字符大小寫轉換或數(shù)據(jù)類型進行轉換,則使用這種索引就可以提高查詢效率。例如圖書銷售管理數(shù)據(jù)庫中的銷售單表
saleorders,其中saleorder_date列存儲了圖書銷售的日期,如果要搜索2011年以后銷售單信息,那么使用WHERE
saleorder_date>=′2011′這樣的搜索條件時,會提示數(shù)據(jù)類型不匹配的錯誤。為了解決這個問題,可以在saleorder_date列使用類型轉換函數(shù)TO_CHAR,代碼如下:SQL>SELECT
*
FROM
saleorders2WHERE
TO_CHAR(sale_date,′YYYY′)>=′2011′;使用這種方法后,雖然可以正常運行,但是該查詢將執(zhí)行全表搜索,即使在birthday列建立了索引,對列值進行類型轉換后,該值也不會出現(xiàn)在索引中。為了解決這個問題,可以創(chuàng)建基于函數(shù)的索引。基于函數(shù)的索引只是常規(guī)的B樹索引,但它是基于一個應用于表中數(shù)據(jù)的函數(shù),而不是直接放在表中的數(shù)據(jù)本身上。知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用3.索引的使用環(huán)境根據(jù)不同的數(shù)據(jù)查詢需要,建立不同的索引類型,一般基于以下原則:B樹索引可以快速定位行,應建立于高cardinality列(即列的唯一值除以行數(shù)為一個很大的值,存在很少的相同值)的情況下。B樹索引分為唯一性和非唯一性索引,如果某個列的
值唯一,則在該列上就可以創(chuàng)建唯一性索引,否則就創(chuàng)建非唯一性索引,默認情況下創(chuàng)建的是非唯一性索引。位圖索引主要用于決策支持系統(tǒng)或靜態(tài)數(shù)據(jù),不支持行級鎖定,適合集中讀取,不適合插入和修改。位圖索引最好用于低cardinality列。反向索引應用于特殊場合,多用于并行服務器環(huán)境下,用于減少索引葉的競爭?;诤瘮?shù)索引應用于查詢語句條件列上包含函數(shù)的情況,索引中儲存了經過函數(shù)計算的索引碼值,這種索引可以在不修改應用程序的情況下提高查詢效率。知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用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>知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用語法說明如下:UNIQUE|BITMAP:在創(chuàng)建索引時,如果指定關鍵字UNIQUE,表示建立唯一B樹索引,
要求表中的每一行在索引列中都包含唯一的值。如果指定BITMAP關鍵字,表示創(chuàng)建一個位圖索引。這兩個關鍵字可以省略,省略后創(chuàng)建的索引為普通B樹索引。ON<schema>.<table_name>:表示創(chuàng)建索引的數(shù)據(jù)表名。(3)(<column_name>|<expression>ASC|DESC,…):該語句列出了創(chuàng)建索引的列。
ASC為默認順序,表示為升序排列,DESC為降序排列。各列之間用逗號間隔,也可以不使用基本列,而使用一個表達式,這時創(chuàng)建的索引為“基于函數(shù)的索引”。TABLESPACE<tablespace_name>:表示指定存儲索引的表空間。如果省略,則索引將使用用戶模式的默認表空間。STORAGE(<STORAGE_SETTINGS>:表示為索引指定存儲參數(shù)。如果省略,則使用指定表空間或默認表空間的存儲參數(shù)。LOGGING|NOLOGGING:LOGGING表示存儲日志信息,NOLOGGING表示不存儲日志信息。COMPUTE
STATISTICS:創(chuàng)建新索引時收集統(tǒng)計信息。NOCOMPRESS|COMPRESS<nn>:表示是否使用“鍵壓縮”。使用鍵壓縮可以刪除一個鍵列中出現(xiàn)的重復值,節(jié)省空間。NOSORT|REVERSE:使用NOSORT將使用與表中相同的順序創(chuàng)建索引,不再對索引進行排序。REVERSE則表示以相反的順序存儲索引值。PARTITION|GLOBAL
PARTITION<partition_setting>:使用該子句可以在分區(qū)表或未分區(qū)表上對創(chuàng)建的索引進行分區(qū)。知識點1任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用知識點2任務6圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用1.索引組織表(1)索引組織表概念索引組織表是Oracle提供的用于提高查詢效率的一種新型表,索引組織表也稱為IOT,它不僅可以存儲數(shù)據(jù),而且還可以存儲為表建立的索引,以提高查詢性能。索引組織表與普通表不同,索引組織表的數(shù)據(jù)是以被排序后的主鍵順序存儲的。索引組織表為精確匹配和范圍搜索的數(shù)據(jù)查詢提供了快速訪問。索引組織表是以犧牲插入和更新性能為代價的。在索引組織表中,如果向表中添加數(shù)據(jù),首先會根據(jù)主鍵列對其排序,然后才將數(shù)據(jù)寫入磁盤,這樣能夠在使用主鍵列查詢時,在索引組織表中得到更好的讀取性能。在基本表上進行相同的查詢時,首先讀取索引,然后判斷數(shù)據(jù)塊在磁盤上的位置,最后Oracle必須將相關的數(shù)據(jù)塊放入內存中。而索引組織表將所有數(shù)據(jù)都存儲在索引中,所以不需要再去查詢存儲數(shù)據(jù)的數(shù)據(jù)塊。在索引組織表中執(zhí)行查詢的效率是基本表的兩倍。索引組織表與基本表的結構對比,如圖6-2所示。圖6-2索引組織表與基本表的結構對比Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)知識點2任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用(2)創(chuàng)建索引組織表創(chuàng)建索引組織表使用CREATE
TABLE語句時,要提供如下選項:①ORGANIZATION
INDEX子句,必選項,表示創(chuàng)建的表為索引組織表。②必須為索引組織表指定主鍵。③OVERFLOW子句,可選項。表示使用行溢出子句,當索引包含大量的數(shù)據(jù)時,將會降低索引組織表的查詢性能,為此引用了行溢出說明子句,可以將經常要查詢的數(shù)據(jù)放在基本索引塊中,將不經常查詢或者較大的數(shù)據(jù)列存儲在另外的段中,這種段稱為溢出段,有兩個選項規(guī)定數(shù)據(jù)的存儲方式:INCLUDING和PCTTHRESHOLD。INCLUDING
n,表示當行中數(shù)據(jù)超出此百分比,該行尾部的列溢出到溢出段。PCTTHRESHOLD
column_name,表示指定列之前的所有列均存入基本索引塊,之后的列則存入溢出段。④COMPRESS子句,可選項。表示使用鍵壓縮方法創(chuàng)建索引組織表時,能夠消除索引鍵列中重復出現(xiàn)的值,它可以用于所有索引的選項。2.臨時表Oracle的臨時表是“靜態(tài)”的,它與普通的數(shù)據(jù)表一樣在數(shù)據(jù)庫中只需建立一次,其結構從創(chuàng)建到刪除的整個期間都是有效的。臨時表的特點①臨時表只有在用戶實際向表中添加數(shù)據(jù)時,才會為其分配存儲空間。②為臨時表分配的空間來自臨時表空間,避免了與永久對象的數(shù)據(jù)爭用存儲空間。③臨時表中存儲的數(shù)據(jù)也是以事務或者會話為基礎的,當用戶當前的事務結束或者會話終止時,臨時表就會因為釋放所占用的存儲空間而丟失數(shù)據(jù)。④與堆表一樣,用戶可以在臨時表上建立索引、視圖和觸發(fā)器等,但建立的索引、視圖和觸發(fā)器也是臨時的,只對當前會話或者事務有效。臨時表的級別臨時表主要分為兩種:事務級別臨時表和會話級別臨時表。①事務級別臨時表事務級別臨時表是指臨時表中的數(shù)據(jù)只在事務生命周期中存在。當一個事務結束時,臨時表中的數(shù)據(jù)被自動清除。②會話級別臨時表會話級別臨時表是指臨時表中的數(shù)據(jù)只在會話生命周期中存在,當用戶退出,會話結束時,臨時表中的數(shù)據(jù)被自動清除。知識點2任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用3.分區(qū)表分區(qū)表在大型的數(shù)據(jù)庫應用中,需要處理的數(shù)據(jù)量可以達到幾十到幾百GB,甚至達到TB級,例如圖書銷售管理數(shù)據(jù)庫的圖書數(shù)據(jù)表books。為了提高對大容量數(shù)據(jù)庫的讀寫和查詢速度,Oracle提供了分區(qū)技術。分區(qū)表是將一個非常大的表分割成較小的片段(分區(qū))。在實際應用中,對分區(qū)表的操作是在獨立的分區(qū)上,但是對用戶而言,分區(qū)表的使用就像一個基本表一樣。分區(qū)表的類型Oracle數(shù)據(jù)庫提供對表或索引的分區(qū)類型有五種:范圍分區(qū)、散列分區(qū)、列表分區(qū)、組合范圍散列分區(qū)和組合范圍列表分區(qū)。在創(chuàng)建分區(qū)表時,應根據(jù)不同類型分區(qū)的特點,選擇合適的分區(qū)類型。①范圍分區(qū)表范圍分區(qū)表就是根據(jù)數(shù)據(jù)表中的某個值的范圍進行分區(qū),根據(jù)某個值的大小或次序,決定將每條數(shù)據(jù)分別存儲在哪個分區(qū)上。創(chuàng)建范圍分區(qū)需要使用PARTITION
BY
RANGE子句。知識點2任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用②散列分區(qū)表散列分區(qū)表是通過HASH算法均勻分布數(shù)據(jù)的一種分區(qū)類型。通過在I/O設備上進行散列分區(qū),可以使得分區(qū)的大小一致。創(chuàng)建散列分區(qū)需要使用PARTITION
BY
HASH子句。③列表分區(qū)表列表分區(qū)表是基于特定值的列表對表進行分區(qū)。列表分區(qū)適用于分區(qū)列表的值為非數(shù)字或日期數(shù)據(jù)類型,并且分區(qū)列的取值范圍較少時使用。創(chuàng)建列表分區(qū)需要使用PARTITION
BY
LIST子句。④組合范圍散列分區(qū)表組合范圍散列分區(qū)表,是范圍分區(qū)和散區(qū)進行組合使用。這種形式首先使用范圍值進行分區(qū),然后使用散列值進行分區(qū)。創(chuàng)建組合范圍散列分區(qū)表要同時使用范圍分區(qū)子句和散列分區(qū)子句。⑤組合范圍列表分區(qū)表組合范圍列表分區(qū),就是將范圍分區(qū)和列表分區(qū)結合使用。這種形式首先使用范圍值進行分區(qū),然后使用列表值進行分區(qū)。創(chuàng)建組合范圍列表分區(qū)表要同時使用范圍分區(qū)子句和列表分區(qū)子句。知識點2任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用1.視圖概述(1)視圖視圖是根據(jù)一個或多個基本表定義的一個虛擬表,視圖并不存儲真正的數(shù)據(jù),它的行和列的數(shù)據(jù)來自于定義視圖的查詢語句中引用的數(shù)據(jù)表,這些表稱為視圖的基本表。視圖僅僅把視圖定義語句存儲在Oracle數(shù)據(jù)字典中,實際的數(shù)據(jù)仍保存在基本表中,所以建立視圖不用消耗任何存儲空間。視圖可以建立在基本表上,也可以建立在其他視圖上,或者同時建立在兩者之上。視圖看上去非常像數(shù)據(jù)庫中的表,用戶可以在視圖中進行INSERT、UPDATE和DELETE操作,所以說視圖是可更新的,但通過視圖修改數(shù)據(jù)時,實際上是在修改基本表中的數(shù)據(jù),相應地,改變基本表中的數(shù)據(jù)也會反映在由該表產生的視圖中。知識點3任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用(2)視圖的作用①視圖可以隱藏復雜查詢,簡化用戶編寫查詢語句例如程序員在設計開發(fā)圖書銷售管理系統(tǒng)時,經常要查詢圖書的銷售情況信息,這樣需要涉及圖書表、銷售單表和客戶表,由于涉及多表查詢,因此必須建立表與表之間的聯(lián)系,同時還要添加其他的查詢條件,為此在查詢圖書銷售情況時書寫的SQL語句比較復雜,如果將其定義為視圖,則程序員在設計查詢圖書的銷售情況信息時,只需從視圖中查詢即可,不必重復輸入復雜的SQL語句。②視圖保證了數(shù)據(jù)的安全性用戶在進行數(shù)據(jù)查詢時,如果直接從基本表中進行查詢,則必須要指定表中的基本列,這樣表中的所有數(shù)據(jù)以及結構將全部呈現(xiàn)在用戶面前,會給數(shù)據(jù)庫造成一定安全性問題。如果將多個基本表的查詢定義為視圖,則用戶在查詢時只能看見視圖,同時視圖的結構可以使用它所基于表的列名不同的列名,還可以建立限制其他用戶訪問的視圖,保證了數(shù)據(jù)的安全性。知識點3任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用2.創(chuàng)建視圖在當前用戶模式下創(chuàng)建視圖,用戶必須有CREATEVIEW的系統(tǒng)權限。在其他用戶模式下創(chuàng)建視圖,用戶必須具有CREATE
ANY
VIEW的系統(tǒng)權限。另外,如果創(chuàng)建視圖所用到的表或視圖不是該用戶的表,必須由擁有該表或視圖的用戶將其相關權限賦予該用戶。創(chuàng)建視圖的命令為CREATE
VIEW,定義視圖的查詢可以建立在一個或多個表,或其他視圖上。創(chuàng)建視圖時可以帶有一些關鍵字或子句。其語法如下: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表示即使基本表不存在,也要創(chuàng)建視圖;NOFORCE表示如果基本表不存在,則不創(chuàng)建視圖,默認為NOFORCE。iew_name:創(chuàng)建的視圖名稱。知識點3任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用alias_name:子查詢中列(或表達式)的別名。別名的個數(shù)與子查詢中列(或表達式)的個數(shù)必須一致。subquery:子查詢語句。CHECK
OPTION:除了可以對視圖執(zhí)行SELECT查詢以外,還可以對視圖進行DML操作。對視圖的操作實際上也是對基本表的操作。默認情況下,可以通過視圖對基本表中的所有數(shù)據(jù)行進行DML操作,包括視圖的子查詢無法檢索到的數(shù)據(jù)行。如果使用WITH
CHECK
OPTION,則表示只能對視圖中子查詢能夠檢索的數(shù)據(jù)行進行DML操作。READ
ONLY:表示通過視圖只能讀取基本表中的數(shù)據(jù)行,而不能進行DML操作。CONSTRAINT
constraint_name:為WITH
CHECK
OPTION或WITH
READ
ONLY約束定義約束名稱。知識點3任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用3.查看視圖一個視圖創(chuàng)建好后,想要了解其定義信息(主要是指其子查詢內容),可以查詢與視圖相關的數(shù)據(jù)字典。與視圖相關的數(shù)據(jù)字典視圖有:DBA_VIEWS:存放了數(shù)據(jù)庫中所有視圖的信息;ALL_VIEWS:存放用戶可存取的視圖的信息;USER_VIEWS:存放用戶擁有的視圖的信息。它們各自有3個字段:視圖名
VIEW_NAME,視圖文本長度TEXT_LENGTH,視圖文本TEXT。其中TEXT字段比較有用,它反映了創(chuàng)建該視圖的語句。4.刪除視圖刪除視圖的操作很簡單,使用DROP
VIEW命令。同時將視圖定義從數(shù)據(jù)字典中刪除,基于視圖的權限也同時被刪除,其他涉及該視圖的函數(shù)、視圖、程序等都將被視為非法。知識點3任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用1.序列在創(chuàng)建表時,通常通過指定數(shù)據(jù)表的主鍵值來保證數(shù)據(jù)表的實體完整性。使用手工指定主鍵值這種方式,由于主鍵值不允許重復,因此它要求操作人員在指定主鍵值時自動判斷添加的值是否已經存在,這明顯是不可取的。Oracle中提供了序列對象,序列表示自動生成一個整數(shù)序列,主要用來自動為表中的主鍵列提供有序的唯一值,這樣就可以避免在向表中添加數(shù)據(jù)時手工指定主鍵值。(1)創(chuàng)建序列序列與視圖一樣,并不占用實際的存儲空間,只是在數(shù)據(jù)字典中保存它的定義信息。在當前用戶模式中創(chuàng)建序列時,必須具有CREATE
SEQUENCE系統(tǒng)權限。要在其他模式中創(chuàng)建序列,必須具有CREATE
ANY
SEQUENCE系統(tǒng)權限。創(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];知識點4任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用語法說明如下:①sequence_name:創(chuàng)建的序列名。②START
WITH
start_number:指定序列的起始值。如果序列是遞增的,則其默認值為MINVALUE參數(shù)值;如果序列是遞減的,則其默認值為MAXVALUE參數(shù)值。③INCREMENT
BY
increment_number:指定序列的增量。如果increment_number為正數(shù),則表示創(chuàng)建遞增序列,否則表示創(chuàng)建遞減序列,默認值為1。④MINVALUE
minvalue|NOMINVALUE:指定序列最小整數(shù)值。如果指定為NOMINVALUE,則表示遞增序列的最小值為1,遞減序列的最小值為-1026,默認為NOMINVALUE。⑤MAXVALUE
maxvalue|NOMAXVALUE:指定序列的最大整數(shù)值。如果指定為NOMAXVALUE,則表示遞增序列的最大值為1027,遞減序列的最大值為-1,默認為NOMAXVALUE。⑥CHCHE
cache_number|NOCACHE:指定在內存中預存儲的序列號的個數(shù)。默認為20個,最少為2個。⑦CYCLE|NOCYCLE:指定是否循環(huán)生成序列號。如果指定為CYCLE,表示循環(huán),當遞增序列達到最大值時,重新從最小值開始生成序列號,當遞減序列達到最小值后,重新從最大值開始生成序列號,默認為NOCYCLE。⑧ORDER|NOORDER:指定是否按照請求次序生成序列號。ORDER表示是,NOORDER表示否,默認為NOORDER。知識點4任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用使用序列在使用序列之前,首先介紹序列中的兩個偽列,它們是:①CURRVAL:用于獲取序列的當前值。使用形式為<sequence_name>.CURRVAL。必須在使用一次NEXTVAL之后才能使用此偽列。②NEXTVAL:用于獲取序列的下一個值。使用序列向表中的列自動賦值時,就是使用此偽列。使用形式為<sequence_name>.NEXTVAL。修改序列序列可以使用ALTER
SEQUENCE語句進行修改,其他參數(shù)與CREATE
SEQUENCE語句相同。修改序列的參數(shù)必須要注意以下事項:不能修改序列的起始值、序列的最小值不能大于當前值、序列的最大值不能小于當前值。刪除序列序列可以使用DROP
SEQUENCE語句刪除,其語法如下:DROP
SEQUENCE
sequence_name;知識點4任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用2.同義詞同義詞概述同義詞是表、索引等模式對象的一個別名。同義詞只是數(shù)據(jù)庫對象的一個替代名,在使用同義詞時,Oracle會將其翻譯為對應的對象名稱。同義詞只在數(shù)據(jù)字典中保存其定義描述,并不占用實際的存儲空間。在開發(fā)數(shù)據(jù)庫應用程序時,在代碼中應盡量避免直接引用表、視圖的對象名稱,而使用這些對象的同義詞,這樣可以避免當數(shù)據(jù)庫管理員對數(shù)據(jù)庫對象做出修改和變動時,必須重新編譯應用程序。Oracle中同義詞分為兩類:①公有同義詞:在數(shù)據(jù)庫中的所有用戶都可以使用;②私有同義詞:由創(chuàng)建它的用戶私人擁有,但用戶可以控制其他用戶是否有權使用自己的同義詞。創(chuàng)建同義詞創(chuàng)建同義詞的語法如下:CREACE[PUBLIC
]SYNONYM
synonym_name
FOR
schema_object;語法說明如下:①PUBLIC:指定創(chuàng)建的同義詞是公有同義詞,如果無該選項,則表示是私有同義詞。②synonym_name:創(chuàng)建的同義詞名稱。③schema_object:指定同義詞所代表的對象名。刪除同義詞刪除同義詞,需要使用DROP
SYNONYM語句。如果是刪除公有同義詞,還需要指定PUBLIC關鍵字。其語法如下:DROP
[PUBLIC]
SYNONYM
synonym_name;知識點4任務6Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書圖書銷售數(shù)據(jù)庫中索引和其他模式對象的應用子目錄任務6.1圖書銷售管理數(shù)據(jù)庫中索引的使用在圖書銷售管理系統(tǒng)中經常要進行數(shù)據(jù)查詢工作,如查詢指定供應商供應的圖書信息、查詢指定類別的圖書信息、統(tǒng)計圖書銷售情況等。為了提高數(shù)據(jù)的查詢效率,Oracle提供了索引對
象,以便實現(xiàn)快速數(shù)據(jù)查詢。子任務1創(chuàng)建圖書銷售管理數(shù)據(jù)庫的B樹索引子任務2創(chuàng)建圖書銷售管理數(shù)據(jù)庫的位圖索引子任務3創(chuàng)建圖書銷售管理數(shù)據(jù)庫的反向鍵索引和基于函數(shù)的索引子任務4圖書銷售管理數(shù)據(jù)庫的索引管理返回Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)Oracle數(shù)據(jù)庫系統(tǒng)提供了B樹索引,B樹索引是一種最常用的索引類型,適用于查詢列的值很少出現(xiàn)重復的情況,可以實現(xiàn)查詢數(shù)據(jù)的快速定位。在圖書銷售管理系統(tǒng)中經常進行供應商信息查詢、出版社信息查詢、圖書信息查詢以及客戶信息查詢等。本任務根據(jù)圖書銷售管理系統(tǒng)的查詢功能需求,為圖書銷售管理數(shù)據(jù)庫的供應商表suppliers、出版社表presses、圖書表books、客戶表clients建立B樹索引。任務分析任務6.1-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)創(chuàng)建圖書銷售管理數(shù)據(jù)庫的B樹索引1.為圖書銷售管理數(shù)據(jù)庫的供應商表suppliers的供應商名稱列建立B樹索引使用SQL
Plus工具連接到數(shù)據(jù)庫book,操作過程請參考任務二。如果當前連接的不是
book數(shù)據(jù)庫,也可以在連接到默認數(shù)據(jù)庫后,使用connect命令連接到指定的數(shù)據(jù)庫。在SQL
Plus編輯窗口中建立供應商表的B樹索引,索引名稱為suppliername_idx,存儲到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,存儲到bookspace表空間的SQL語句,代碼如下:SQL>CREATE
INDEX
pressname_idx
ON
presses(press_name)
TABLESPACEBOOKSPACE;任務實施創(chuàng)建圖書銷售管理數(shù)據(jù)庫的B樹索引任務6.1-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)位圖索引適用于表中的列具有較小的基數(shù),在創(chuàng)建位圖索引時,必須在語句中使用BITMAP關鍵字,同時位圖索引不能是唯一索引,也不能對其進行鍵壓縮。圖書銷售管理系統(tǒng)中按類別查詢圖書信息,在圖書表中類別列的值占總記錄的百分比在1%左右,如果建立B樹索引,將大大降低數(shù)據(jù)查詢的效率,這種情況下必須要建立位圖索引。本任務為圖書表books建立位圖索引。任務分析創(chuàng)建圖書銷售管理數(shù)據(jù)庫的位圖索引任務6.1-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)連接到數(shù)據(jù)庫book。在SQL
Plus編輯窗口中輸入建立圖書表books位圖索引,索引名稱為typeid_bitmap,存儲到users表空間的SQL語句,代碼如下:SQL>CREATE
BITMAP
INDEX
typeid_bitmap
ON
books(type_id)TABLESPACE
users;索引已創(chuàng)建。小提示:在表上放置單獨的位圖索引是無意義的。例如,單獨在books表的type_id列創(chuàng)建位圖索引,如果使用該索引進行查詢,則會返回表中大部分的行。因此,位圖索引的作用來源于與其他位圖索引的結合。這樣當在多個列上進行查詢時,就可以對這些列上的位圖進行布爾AND和OR運算,最終找到所需要的結果。只有對多個列建立索引,用戶才能夠有效地利用它們。任務實施創(chuàng)建圖書銷售管理數(shù)據(jù)庫的位圖索引任務6.1-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)反向鍵索引適用于嚴格排序的列,鍵的反轉對用戶而言是完全透明的。用戶可以使用常規(guī)的方式查詢數(shù)據(jù),對鍵的反轉由系統(tǒng)自動處理。在創(chuàng)建反向鍵索引時,必須在創(chuàng)建索引的語句中指定關鍵字REVERSE。創(chuàng)建基于函數(shù)的索引,可以提高當在查詢條件中使用函數(shù)和表達式時查詢的執(zhí)行效率,在創(chuàng)建基于函數(shù)的索引時,Oracle首先會對包含索引列的函數(shù)或表達式進行求值,然后對求值后的結果進行排序,最后再存儲到索引中。在創(chuàng)建基于函數(shù)的索引時,既可以是普通的B樹索引,也可以是位圖索引。同時在創(chuàng)建基于函數(shù)的索引時,不僅可以使用SQL函數(shù),也可以使用用戶自定義函數(shù)。圖書銷售管理系統(tǒng)中,有時會按書號來查詢圖書信息或圖書銷售信息,為提高查詢效率,可以在該列建立反向鍵索引。在圖書銷售管理系統(tǒng)中,查詢某年購入的圖書信息或銷售的圖書信息,要使用函數(shù)to_char函數(shù)提取入庫日期或銷售日期的年份進行比較,則可以在圖書入庫日期或銷售日期列建立基于函數(shù)的索引。本任務對圖書銷售單表saleorders的書號列建立反向鍵索引,對入庫單表entryorders和銷售單表saleorders建立基于函數(shù)的索引。任務分析創(chuàng)建圖書銷售管理數(shù)據(jù)庫的反向鍵索引和基于函數(shù)的索引任務6.1-子任務3Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)1.為圖書銷售單表saleorders的書號(book_id)列建立反向鍵索引。連接到數(shù)據(jù)庫book。在SQL
Plus編輯窗口輸入建立圖書銷售單表的反向鍵索引,索引名稱為
saleorder_bookid_idx,存儲到表空間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,存儲到表空間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,存儲到表空間users中,代碼參考為圖書入庫單建立基于函數(shù)的索引。任務實施創(chuàng)建圖書銷售管理數(shù)據(jù)庫的反向鍵索引和基于函數(shù)的索引任務6.1-子任務3Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)索引管理除了創(chuàng)建索引之外,還可以進行合并索引、重建索引和刪除索引。在圖書銷售管理系統(tǒng)中經常對各個表進行更新操作,這樣在表的索引中會產生越來越多的存儲碎片,從而影響索引的工作效率,用戶可以通過合并索引和重建索引的方法來解決這個問題。修改索引的語句為ALTERINDEX.本任務對圖書銷售管理數(shù)據(jù)庫建立的索引進行合并、重建和刪除。任務分析圖書銷售管理數(shù)據(jù)庫的索引管理任務6.1-子任務4Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)任務實施圖書銷售管理數(shù)據(jù)庫的索引管理1.合并圖書銷售管理數(shù)據(jù)庫中圖書表books的索引bookname_idx合并索引只是簡單地把B樹索引的葉子節(jié)點中的存儲碎片合并在一起,并不會改變物理組織結構,所以執(zhí)行合并索引操作的代價較小。語法格式為: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重建索引是在指定的表空間中刪除原來的索引,再重新建立一個索引,執(zhí)行重建索引操作的代價較大。語法格式為:ALTER
INDEX
indexname
REBUILD連接到book數(shù)據(jù)庫。在SQL
Plus編輯窗口輸入重建圖書銷售管理數(shù)據(jù)庫的索引pressname_idx的SQL語句,代碼如下:SQL>ALTER
INDEX
pressname_idxREBUILD;索引已更改。任務6.1-子任務4Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)3.把圖書銷售管理數(shù)據(jù)庫中出版社表suppliers中的索引suppliername_idx刪除語法格式為:DROP
INDEX
[schema.]indexname
[FORCE]語法說明:①schema:包含索引的模式;②index_name:索引的名稱;③FORCE:強制刪除,即使索引類型程序調用返回錯誤或者索引被標記為處理中,該索引同樣被刪除。連接到book數(shù)據(jù)庫。在SQL
Plus編輯窗口輸入刪除圖書銷售管理數(shù)據(jù)庫的索引suppliername_idx的SQL語句,代碼如下:SQL>DROP
INDEX
suppliername_idx;索引已刪除。說明:若要刪除與主鍵或唯一鍵約束相關的索引,必須先刪除這些約束。任務實施圖書銷售管理數(shù)據(jù)庫的索引管理任務6.1-子任務4Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)子目錄任務6.2圖書銷售管理數(shù)據(jù)庫中外部表的應用在圖書銷售管理系統(tǒng)中,經常接收到供應商或出版社的圖書信息,接收到的信息大部分都是Excel文件,那么在系統(tǒng)中如何導入或應用這些外部的數(shù)據(jù)就提到了用戶的面前。Oracle提供了外部表來實現(xiàn)這項功能。外部表是引用數(shù)據(jù)庫之外的文件系統(tǒng)中存儲數(shù)據(jù)的一種只讀表,外部表所要讀取的數(shù)據(jù)存儲在Oracle數(shù)據(jù)庫外部的文件中,如文本文件、Excel文件,并且只能讀取外部文件中的數(shù)據(jù),不能進行數(shù)據(jù)的寫入。使用外部表無需將數(shù)據(jù)復制到數(shù)據(jù)庫中,可以讓數(shù)據(jù)保留在普通的文件中,并且允許數(shù)據(jù)庫對其進行實時讀取。子任務1讀取文本文件中的數(shù)據(jù)子任務2讀取Excel文件中的數(shù)據(jù)返回Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)使用Oracle的外部表,可以將一個格式化的文本文件或Excel文件等虛擬成數(shù)據(jù)庫的表,并且可以使用Select語句進行訪問表中的數(shù)據(jù)。Oracle讀取外部文件,必須要創(chuàng)建目錄對象和外部表,然后通過SQL語句讀取外部表鏈接的外部文件中的數(shù)據(jù)。1.創(chuàng)建目錄對象在Oracle中創(chuàng)建目錄對象用來指向外部文件所存放的磁盤文件夾。創(chuàng)建目錄對象登錄用戶必須具有CREATEANYDIRECTORY權限?;靖袷饺缦拢篊REATE
DIRECTORYexterior_data
as磁盤路徑任務分析讀取文本文件中的數(shù)據(jù)任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)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子句選項說明如下:(1)TYPE:用來指定訪問外部表數(shù)據(jù)文件時所應用的訪問驅動程序,該程序可以將數(shù)據(jù)從它們最初的格式轉為可以向服務器提供的格式,默認訪問驅動程序是ORACLE_LOADER。任務分析讀取文本文件中的數(shù)據(jù)任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)DEFAULT
DIRECTORY:用來指定所使用的目錄對象,該目錄對象指向外部數(shù)據(jù)文件所在目錄。LOCATION:用來指定源數(shù)據(jù)文件名稱。ACCESS
PARAMETERS:用來設置訪問驅動程序進行數(shù)據(jù)格式轉換時的參數(shù)。FIELDS
TERMINATED
BY:用來指定字段之間的分隔符。小提示:在創(chuàng)建外部表時,表中的字段數(shù)量、各個字段的數(shù)據(jù)類型必須與外部文件的數(shù)據(jù)格式一致,并且不能為表中的字段指定主鍵約束、唯一約束和空值約束等。3.外部表錯誤的處理在將外部文件中的數(shù)據(jù)轉換為外部表時,源數(shù)據(jù)文件中的數(shù)據(jù)類型轉換為表定義的數(shù)據(jù)類型時,有可能會出現(xiàn)錯誤,如指定的分隔符不符合要求,這會導致數(shù)據(jù)類型轉換出錯。在創(chuàng)建外部表時,可以指定一些子句來對錯誤進行處理。關于錯誤的子句主要包括REJECT
LIMIT、BADFILE和LOGFILE。任務分析讀取文本文件中的數(shù)據(jù)任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)REJECT
LIMIT子句在創(chuàng)建外部表時,如果使用REJECTLIMIT子句,可以指定在數(shù)據(jù)類型轉換期間允許出現(xiàn)的錯誤個數(shù)。默認情況下,REJECT
LIMIT子句指定的數(shù)值為0,即不允許錯誤發(fā)生??梢栽谑褂肦EJECTLIMIT子句時設置允許出現(xiàn)的錯誤數(shù)為UNLIMITED,則在查詢時不會出現(xiàn)失敗。如果外部數(shù)據(jù)文件中的所有記錄都由于轉換錯誤而失敗,那么查詢結果將返回0行,即“未選定行”。BADFILE和NOBADFILE子句如果在創(chuàng)建外部表時使用BADFILE子句,則將所有不能轉換的數(shù)值都寫入到BADFILE子句指定的文件中。如果在創(chuàng)建外部表時使用了NOBADFILE子句時,Oracle將忽略數(shù)據(jù)類型轉換錯誤。如果用戶在創(chuàng)建表時沒有規(guī)定BADFILE和NOBADFILE子句,默認情況下,Oracle將自動建立一個名稱與外部表相同,但擴展名為.bad的文件,并且該文件與數(shù)據(jù)文件位于同一個目錄中。LOGFILE和NOLOGFILE子句在建立外部表時經常會發(fā)生錯誤,如操作系統(tǒng)限制Oracle讀取文件、數(shù)據(jù)文件不存在。當發(fā)生錯誤時,Oracle將在日志文件中記錄這些錯誤。LOGFILE子句用來指定一個記錄錯誤信息的日志文件,NOLOGFILE子句則不會將錯誤信息寫入任何日志文件中。在創(chuàng)建外部表時如果沒有規(guī)定LOGFILE或NOLOGFILE,則Oracle將會默認建立一個LOGFILE文件,該文件的名稱與外部表相同,擴展名為.log,該文件與數(shù)據(jù)文件位于同一個目錄中。任務分析讀取文本文件中的數(shù)據(jù)任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)4.外部表的局限性外部表只能用于查詢,不能寫入數(shù)據(jù)。外部表在讀取外部文件中的數(shù)據(jù)時,其實數(shù)據(jù)并沒有存放到Oracle數(shù)據(jù)庫,仍然存放在外部數(shù)據(jù)文件中,因此外部表是只讀的,只能夠用于查詢數(shù)據(jù)。Oracle沒有提供相應的方法去更新或刪除這些表中的記錄,當需要對外部表中的數(shù)據(jù)進行修改時,只能通過直接修改數(shù)據(jù)文件實現(xiàn)。外部表不能建立索引Oracle不能在外部表上建立索引,這就表明在每次使用SELECT查詢表時,Oracle都需要進行完全搜索外部表,當表比較大時,將嚴重影響查詢的執(zhí)行效率。本任務使用Oracle的外部表讀取供應商提供格式化的文本文件圖書信息,基本步驟是建立格式化的文本文件、建立Oracle外部表文件結構和使用Select語句讀取外部表文件。任務分析讀取文本文件中的數(shù)據(jù)任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)創(chuàng)建或取得供應商提供的格式化文本文件圖書信息,分隔符為逗號,文件名為books.txt,保存在“D:\\exterior”文件夾中。如圖6-3所示。小提示:外部文件可以是文本文件,也可以是Excel文件,但要注意必須是格式化的文件,尤其是各字段的值不要出現(xiàn)分隔符字符。創(chuàng)建目錄對象,指向文本文件所存放的磁盤文件夾,在SQL
Plus界面中輸入如下代碼:
SQL>CREATE
DIRECTORY
exterior_data
AS′D:\exterior′;任務實施讀取文本文件中的數(shù)據(jù)圖6-3圖書信息文本文件books.txt數(shù)據(jù)內容任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)3.針對上述所建立的圖書信息文本文件和目錄對象,創(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任務實施讀取文本文件中的數(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)建。任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)4.在Oracle
Enterprise
Manager管理器的SQL工作表中使用SELECT語句查詢外部表
exterior_books的數(shù)據(jù),如圖6-4所示。任務實施讀取文本文件中的數(shù)據(jù)圖6-4查詢exterior_books外部表數(shù)據(jù)任務6.2-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)使用Oracle的外部表,不僅可以讀取格式化的文本文件,還可以讀取Excel文件,并使用SELECT語句進行表中數(shù)據(jù)的訪問。本任務是讀取保存在Excel文件中的客戶信息數(shù)據(jù),并將其添加到基本表clients中。任務分析讀取Excel文件中的數(shù)據(jù)任務6.2-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)創(chuàng)建或取得供應商提供的Excel格式文件圖書信息,文件名為clients.csv,保存在
“D:\exterior”文件夾中。該類型的文件可以被Excel軟件使用,如圖6-5所示。創(chuàng)建目錄對象,如果存在目錄對象,則不必建立。代碼如下:
Create
directory
exterior_dataas′D:\data′任務實施讀取Excel文件中的數(shù)據(jù)圖6-5
clients.csv文件中的數(shù)據(jù)內容任務6.2-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)任務實施讀取Excel文件中的數(shù)據(jù)3.針對上述所提供的圖書信息Excel文件和目錄對象,創(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(任務6.2-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)在OracleEnterprise
Manager管理器的SQL工作表中使用SELECT語句查詢外部表exterior_clients的數(shù)據(jù),如圖6-6所示。使用INSERT語句將外部表
exterior_clients讀取的數(shù)據(jù)追加到基本表
clients中。代碼如下:SQL>INSERT
INTOclients
SELECT
*FROMexterior_clients;任務實施讀取Excel文件中的數(shù)據(jù)圖6-6查詢exterior_clients外部表數(shù)據(jù)任務6.2-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)根據(jù)圖書銷售管理系統(tǒng)的功能以及用戶對圖書銷售管理系統(tǒng)軟件的數(shù)據(jù)需求,如果全部創(chuàng)建基本表(堆表)將不能滿足用戶快速查詢數(shù)據(jù)和存儲大量數(shù)據(jù)的要求,Oracle提供了索引組織
表和分區(qū)表來實現(xiàn)用戶的大數(shù)據(jù)量需求。子目錄任務6.3圖書銷售管理數(shù)據(jù)庫中索引組織表和分區(qū)表的應用子任務1建立存儲客戶信息的索引組織表子任務2建立存儲圖書銷售信息數(shù)據(jù)的分區(qū)表返回Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)索引組織表為精確匹配和范圍搜索的數(shù)據(jù)查詢提供了快速訪問。索引組織表不僅存放數(shù)據(jù),而且存放索引數(shù)據(jù)。本任務是為圖書銷售管理數(shù)據(jù)庫建立存儲客戶信息的索引組織表client_tableindex。任務分析建立存儲客戶信息的索引組織表任務6.3-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)連接到數(shù)據(jù)庫book。在SQL
Plus界面輸入為圖書銷售管理數(shù)據(jù)庫建立存儲客戶信息的索引組織表
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選項。任務實施建立存儲客戶信息的索引組織表任務6.3-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)圖書銷售管理系統(tǒng)中存儲著大量的圖書銷售信息數(shù)據(jù),當圖書銷售信息的存儲容量大于幾GB或者更多時,為了提高數(shù)據(jù)的讀寫和查詢速度,Oracle提供了分區(qū)表技術來實現(xiàn)。本任務是為圖書銷售管理數(shù)據(jù)庫建立存儲圖書信息的分區(qū)表saleorders_part,分區(qū)表按銷售日期進行分區(qū)。任務分析建立存儲圖書銷售信息數(shù)據(jù)的分區(qū)表任務6.3-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)連接到數(shù)據(jù)庫book。在SQL
Plus界面輸入SQL語句,為圖書銷售管理數(shù)據(jù)庫創(chuàng)建銷售單的范圍分區(qū)表
saleorders_part,要求2010年以前的記錄存放到mypart1分區(qū),2010~2012年的記錄存放到
mypart2分區(qū),其他記錄保存在mypart3分區(qū),存儲到表空間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)任務實施建立存儲圖書銷售信息數(shù)據(jù)的分區(qū)表任務6.3-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)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ū)表前,必須保證當前數(shù)據(jù)庫已經存在的表空間,以便于將不同的分區(qū)指定到不同的表空間中。任務實施建立存儲圖書銷售信息數(shù)據(jù)的分區(qū)表任務6.3-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)子目錄任務6.4創(chuàng)建圖書銷售管理數(shù)據(jù)庫的視圖查詢是管理信息系統(tǒng)必備的功能之一。圖書銷售管理系統(tǒng)中經常要用到對數(shù)據(jù)進行查詢,在查詢過程中會使用一個數(shù)據(jù)表或多個數(shù)據(jù)表。例如在供應商管理子系統(tǒng)中包括對供應商信息的查詢,可以按供應商號或供應商名完成查詢。在圖書信息管理子系統(tǒng)中包括對圖書綜合信息的查詢,如查詢圖書信息以及出版社和供應商信息等,這樣就用到了多個基本表,表與表之間必須要建立連接,因而書寫查詢語句較為復雜,程序代碼也會增加復雜度。Oracle提供了視圖對象來解決這個問題,視圖是從一個或多個表中導出的虛擬表,視圖建立后可多次使用,同時視圖限制了用戶直接訪問基本表的數(shù)據(jù),保證了數(shù)據(jù)的安全性和可靠性。子任務1建立查詢圖書采購情況的視圖子任務1建立查詢圖書采購情況的視圖子任務2建立綜合查詢圖書信息的視圖子任務3建立查詢圖書銷售情況的視圖返回Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)根據(jù)圖書銷售管理系統(tǒng)的功能需求,用戶查詢圖書采購的圖書信息,對應的SELECT查詢命令是:SELECT
book_name
AS圖書名稱,book_isbn
AS標準書號,book_author
AS作者,entry_number
AS入庫數(shù)量,entry_date
AS入庫日期,supplier_name
AS供應商名稱FROM
suppliers,books,entryordersWHERE
suppliers.supplier_id=entryorders.supplier_id
ANDentryorders.book_id=book.book_id;上述查詢命令中用到了供應商表、入庫單表和圖書表。由于查詢涉及多個數(shù)據(jù)表,則必須要建立表與表之間的聯(lián)系,這樣無疑增加了書寫查詢語句的復雜性。本任務建立一個視圖suppliers_view,用于查詢圖書采購的情況。任務分析建立查詢圖書采購情況的視圖任務6.4-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)1.建立查詢供應商供應圖書的視圖,視圖名稱為suppliers_view,要求查詢供應商名稱、書名、標準書號、作者、入庫數(shù)量和入庫日期信息,并要求創(chuàng)建的視圖為只讀。連接到數(shù)據(jù)庫book。在SQL
Plus窗口中輸入創(chuàng)建視圖suppliers_view的SQL語句,代碼如下:
SQL>CREATE
VIEW
suppliers_view(圖書名稱,標準書號,作者,入庫數(shù)量,入庫日期,供應商名稱)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;任務實施建立查詢圖書采購情況的視圖任務6.4-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)2.利用視圖suppliers_view查詢從“大連新華書店”購入的圖書信息,并按入庫日期升序排序,代碼如下:SQL>SELECT
*
FROMsuppliers_view2WHERE供應商名稱=′大連新華書店′3ORDER
BY入庫日期ASC;從上述查詢命令中可以看出,當從視圖中查詢數(shù)據(jù)時,則不必重復建立數(shù)據(jù)表之間的聯(lián)系,只需添加必要的查詢條件,另外通過suppliers_view視圖不僅可以按供應商名查詢,也可以按入庫日期查詢指定日期或日期范圍內所采購的圖書信息。小提示:在上述代碼條件中不能使用supplier_name列名,而使用在定義視圖時指定的supplier_name字段的別名,即供應商名稱。另外在建立視圖時不允許使用排序子句,如果要排序則應在使用視圖查詢時再指定ORDER
BY子句。任務實施建立查詢圖書采購情況的視圖任務6.4-子任務1Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)在圖書銷售系統(tǒng)的圖書信息管理子系統(tǒng)中,可以實現(xiàn)多種方式綜合查詢圖書信息,例如查詢某出版社出版的圖書信息、查詢某類別的圖書信息、查詢某作者編寫的圖書信息等。本任務建立一個通用的圖書信息查詢視圖,用于實現(xiàn)多種方式綜合查詢圖書信息,視圖名稱為books_view。任務分析建立綜合查詢圖書信息的視圖任務6.4-子任務2Oracle數(shù)據(jù)庫應用技術項目化教程(第二版)1.建立綜合查詢圖書信息的視圖,視圖名稱為books_view,要求視圖中包含書號、圖書名稱、作者、類別名稱、開本、版次、出版日期、圖書單價、庫存數(shù)量、出版社名稱等信息。連接到book數(shù)據(jù)庫。在SQL
Plus界面中輸入建立綜合查詢圖書信息的SQL語句,代碼如下:SQL>CREATE
VIEW
books_view(書號,圖書名稱,作者,類別名稱,開本,版次,出版日期,圖書單價,庫存數(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識產權法作業(yè)(第17-24章)
- 初一期末語文成績分析總結與反思
- 陰莖損傷的健康宣教
- 2024高考語文一輪復習 · 高考文言文斷句主觀題專練
- 2025屆寧夏石嘴山某中學高三二診模擬考試語文試卷含解析
- 2024模具設計、制造及售后服務合同3篇
- 《域名的商業(yè)價值》課件
- 2024旅行社變更股權后的旅游保險代理服務合同3篇
- 2024年環(huán)保雨水收集承包合同3篇
- 2024年物業(yè)消防系統(tǒng)維護合同3篇
- 2024年地理知識競賽試題200題及答案
- 肝衰竭診治指南(2024年版)解讀
- 化學反應工程智慧樹知到期末考試答案章節(jié)答案2024年浙江工業(yè)大學
- 人生悟理-透過物理看人生智慧樹知到期末考試答案2024年
- 兒童劇劇本三只小豬
- 2020 新ACLS-PCSA課前自我測試-翻譯版玉二醫(yī)【復制】附有答案
- 危險化學品安全周知卡氧氣
- DB13∕T 5517-2022 大田作物病蟲草害防控關鍵期植保無人飛機作業(yè)技術規(guī)程
- 《編譯原理》考試試習題及答案(匯總)
- 贏在執(zhí)行力:團隊執(zhí)行力-下
- 鉆孔灌注樁后注漿施工方案(最全版)
評論
0/150
提交評論