24周年

財(cái)稅實(shí)務(wù) 高薪就業(yè) 學(xué)歷教育
APP下載
APP下載新用戶掃碼下載
立享專屬優(yōu)惠

安卓版本:8.7.20 蘋果版本:8.7.20

開(kāi)發(fā)者:北京正保會(huì)計(jì)科技有限公司

應(yīng)用涉及權(quán)限:查看權(quán)限>

APP隱私政策:查看政策>

HD版本上線:點(diǎn)擊下載>

使用Oracle外部表的五個(gè)限制

來(lái)源: 51cto 編輯: 2010/02/03 09:27:59  字體:

  Oracle外部表就好像是一張視圖,在數(shù)據(jù)庫(kù)中可以像試圖一樣進(jìn)行查詢等操作。這個(gè)試圖允許用戶在外部數(shù)據(jù)上運(yùn)行任何的SQL語(yǔ)句,而不需要先將外部表中的數(shù)據(jù)裝載進(jìn)數(shù)據(jù)庫(kù)中。

  外部表是指不在數(shù)據(jù)庫(kù)中的表,如操作系統(tǒng)上的一個(gè)按一定格式分割的文本文件或者其他類型的表。這個(gè)外部表對(duì)于Oracle數(shù)據(jù)庫(kù)來(lái)說(shuō),就好像是一張視圖,在數(shù)據(jù)庫(kù)中可以像試圖一樣進(jìn)行查詢等操作。這個(gè)試圖允許用戶在外部數(shù)據(jù)上運(yùn)行任何的SQL語(yǔ)句,而不需要先將外部表中的數(shù)據(jù)裝載進(jìn)數(shù)據(jù)庫(kù)中。不過(guò)需要注意是,外部數(shù)據(jù)表都是只讀的,不能夠更改。不過(guò)在使用外部表時(shí)仍然有不少的限制。

  限制一:需要先建立目錄對(duì)象。

  在使用外部數(shù)據(jù)表的時(shí)候,需要先建立目錄對(duì)象。也就是說(shuō),要想Oracle數(shù)據(jù)庫(kù)系統(tǒng)訪問(wèn)操作系統(tǒng)文件,就必須在數(shù)據(jù)庫(kù)中建立指向這個(gè)操作系統(tǒng)文件的目錄對(duì)象,然后通過(guò)這個(gè)目錄對(duì)象訪問(wèn)相應(yīng)的操作系統(tǒng)文件,即用目錄對(duì)象存儲(chǔ)操作文件的保存位置。不過(guò)需要注意,這個(gè)目錄對(duì)象普通用戶是無(wú)權(quán)創(chuàng)建的。一般情況下只有特權(quán)用戶或者數(shù)據(jù)庫(kù)管理員角色才可以創(chuàng)建目錄對(duì)象。如果允許其他用戶也可以創(chuàng)建目錄對(duì)象的話,就需要授權(quán)給其他用戶。

  其實(shí)這個(gè)目錄對(duì)象就是操作系統(tǒng)中文件或者表格的存儲(chǔ)位置。不過(guò)在建立對(duì)象的時(shí)候,需要小心,Oracle數(shù)據(jù)庫(kù)系統(tǒng)不會(huì)去確認(rèn)這個(gè)目錄是否真的存在。如果在輸入這個(gè)目錄對(duì)象的時(shí)候,不小心把路徑寫(xiě)錯(cuò)了,那可能這個(gè)外部表仍然可以正常建立,但是卻無(wú)法查詢到數(shù)據(jù)。由于建立目錄對(duì)象時(shí),缺乏這種自我檢查的機(jī)制,為此在將路徑賦予給這個(gè)目錄對(duì)象時(shí),需要特別的注意。另外需要注意的是路徑的大小寫(xiě)。在Windows操作系統(tǒng)中,其路徑是不區(qū)分大小寫(xiě)的。而在Linux操作系統(tǒng),這個(gè)路徑需要區(qū)分大小寫(xiě)。故在不同的操作系統(tǒng)中,建立目錄對(duì)象時(shí)需要注意這個(gè)大小寫(xiě)的差異。最好數(shù)據(jù)庫(kù)管理員可以養(yǎng)成一個(gè)習(xí)慣,無(wú)論在什么操作系統(tǒng)中,都采用小寫(xiě)的目錄名與文件名。那么在不同的操作系統(tǒng)中,就不用受到這個(gè)大小寫(xiě)的困擾了。最后需要注意的是,目錄對(duì)象名必須唯一。如果目錄對(duì)象名字有重復(fù)的話,系統(tǒng)會(huì)提示錯(cuò)誤信息:“名稱已有現(xiàn)有對(duì)象引用”,而不會(huì)自動(dòng)覆蓋原有的對(duì)象名設(shè)置。

  雖然這個(gè)對(duì)象名設(shè)置比較簡(jiǎn)單,但是其是數(shù)據(jù)庫(kù)尋找操作系統(tǒng)上文件的唯一途徑。所以這個(gè)目錄對(duì)象的創(chuàng)建必須確保準(zhǔn)確。否則的話,外部表就可能無(wú)法正常使用。

  限制二:對(duì)于操作系統(tǒng)文件的限制。

  其實(shí)外部表簡(jiǎn)單的說(shuō),就是跟操作系統(tǒng)上固定格式的文件或者表格的一個(gè)連接。為了Oracle數(shù)據(jù)庫(kù)系統(tǒng)能夠正確鏈接外部表,對(duì)于外部表的格式就提出了比較嚴(yán)格的要求。如果不符合這些要求的話,數(shù)據(jù)庫(kù)系統(tǒng)就無(wú)法正確讀取外部表中的數(shù)據(jù)。如對(duì)于分隔符有比較嚴(yán)格的要求。雖然在外部文件或者表格中,可以使用多種分隔符,如英文狀態(tài)下的逗號(hào)或者分號(hào)等等。但是有一個(gè)限制,即在同一個(gè)操作系統(tǒng)文件中只能夠使用一個(gè)分割符號(hào),要么逗號(hào)或者分號(hào)等等。因?yàn)樵诮⑼獠勘頃r(shí),必須指定操作系統(tǒng)文件所使用的分隔符號(hào)。如果有多種分隔符號(hào)的話,數(shù)據(jù)庫(kù)系統(tǒng)將無(wú)法識(shí)別。

  另外在外部表格中,不能夠帶有標(biāo)題信息。如現(xiàn)在有一張表格,以逗號(hào)分隔。而在其第一列數(shù)據(jù)中有各個(gè)列的標(biāo)題信息。而數(shù)據(jù)庫(kù)系統(tǒng)在連接這個(gè)表的時(shí)候,會(huì)將這些標(biāo)題信息當(dāng)作普通的紀(jì)錄來(lái)對(duì)待。即會(huì)將這些信息也顯示在外部表中。為此如果這個(gè)標(biāo)題信息與外部表的字段類型不一致(如字段內(nèi)容是number數(shù)據(jù)類型,而標(biāo)題信息則是字符型數(shù)據(jù),則在查詢時(shí)就會(huì)出錯(cuò))。如果數(shù)據(jù)類型恰巧一致的話,這個(gè)標(biāo)題信息Oracle數(shù)據(jù)庫(kù)也會(huì)當(dāng)作普通記錄來(lái)對(duì)待。如在建立外部表的時(shí)候,最好確認(rèn)一下操作系統(tǒng)文件中是否包含標(biāo)題信息。如果有的話,需要?jiǎng)h除。否則的話,可能會(huì)出錯(cuò)。

  最后需要說(shuō)明的是,當(dāng)Oracle數(shù)據(jù)庫(kù)系統(tǒng)訪問(wèn)這個(gè)操作系統(tǒng)文件的時(shí)候,會(huì)在這個(gè)文件所在的目錄自動(dòng)創(chuàng)建一個(gè)日志文件。無(wú)論最后是否訪問(wèn)成功,這個(gè)日志文件都會(huì)如期建立。查看這個(gè)日志文件,可以了解數(shù)據(jù)庫(kù)訪問(wèn)外部表的頻率、是否成功訪問(wèn)等等。

  限制三:在建立臨時(shí)表時(shí)的限制。

  在建立臨時(shí)表時(shí),也會(huì)有不少的限制。如表中字段的名稱有一些特殊字符的話,那么這個(gè)表列的名稱必須使用英文狀態(tài)的下的雙引號(hào)連接起來(lái)。如采用”studentno#”。遇到列名字中有特殊符號(hào)時(shí),如果不采用雙引號(hào)括起來(lái),雖然臨時(shí)表可以正常創(chuàng)建,但是在采用的時(shí)候會(huì)出現(xiàn)錯(cuò)誤,無(wú)法正常查詢數(shù)據(jù)。如數(shù)據(jù)庫(kù)系統(tǒng)可能會(huì)提醒:“數(shù)據(jù)庫(kù)插件錯(cuò)誤”等信息。為此最好在創(chuàng)建臨時(shí)表時(shí)不要在列名中使用一些特殊的字符。其實(shí)不光光是建立臨時(shí)表有這種限制,建立其他標(biāo)或者試圖都有類似的限制。

  其次,這個(gè)外部表畢竟與內(nèi)部表不同。在創(chuàng)建外部表的時(shí)候,其實(shí)在數(shù)據(jù)庫(kù)中跟本沒(méi)有創(chuàng)建表。也就是說(shuō),不會(huì)為外部表分配任何的存儲(chǔ)空間。創(chuàng)建外部表只是在數(shù)據(jù)字典中創(chuàng)建了外部表的元數(shù)據(jù),以便對(duì)應(yīng)訪問(wèn)外部表中的數(shù)據(jù),而不在數(shù)據(jù)庫(kù)中存儲(chǔ)外部表的數(shù)據(jù)。簡(jiǎn)單地說(shuō),數(shù)據(jù)庫(kù)存儲(chǔ)的只是與外部文件的一種對(duì)應(yīng)關(guān)系,如字段與字段的對(duì)應(yīng)關(guān)系。而沒(méi)有存儲(chǔ)實(shí)際的數(shù)據(jù)。為此在表的操作與管理上,就會(huì)受到很大的限制。如在外部表上,是不能夠?yàn)楸韯?chuàng)建索引。因?yàn)閯?chuàng)建索引就意味著要存在對(duì)應(yīng)的索引記錄。而外部表其實(shí)在數(shù)據(jù)庫(kù)不會(huì)有存儲(chǔ)。故在外部中是無(wú)法建立索引的。如果硬要建立的話,則系統(tǒng)會(huì)提示“操作在外部組織表上不受支持”的錯(cuò)誤提示。同樣的道理,在數(shù)據(jù)庫(kù)中也不能夠更新外部表中的數(shù)據(jù),如插入記錄、刪除記錄或者更新信息等等。簡(jiǎn)而言之,這個(gè)外部表對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),是只讀的,不可更新。

  限制四:刪除外部表或者目錄對(duì)象。

  當(dāng)外部表不用時(shí),需要及時(shí)刪除外部表或者與之對(duì)應(yīng)的目錄對(duì)象。不過(guò)在刪除這些內(nèi)容時(shí)會(huì)有一些限制。這些限制主要是管理上的限制,而不是技術(shù)上的限制。也就是說(shuō),Oracle數(shù)據(jù)庫(kù)系統(tǒng)沒(méi)有對(duì)其進(jìn)行強(qiáng)制的限制。但是如果數(shù)據(jù)庫(kù)管理員不遵守這些限制的話,可能會(huì)出現(xiàn)一些問(wèn)題。如要先刪除外部表,然后再刪除目錄對(duì)象。有時(shí)候一個(gè)目錄對(duì)象中可能會(huì)包含多個(gè)外部表。此時(shí)必須要確認(rèn)所有的外部表都不用了,都已經(jīng)刪除干凈了,然后才能夠刪除目錄對(duì)象。在創(chuàng)建外部表時(shí),操作系統(tǒng)會(huì)判斷一下,與之對(duì)應(yīng)的目錄對(duì)象是否已經(jīng)創(chuàng)建。但是在刪除對(duì)象時(shí),系統(tǒng)不會(huì)去判斷跟這個(gè)目錄對(duì)象關(guān)聯(lián)的外部表是否已經(jīng)全部刪除。如果目錄對(duì)象刪除了,但是還有外部表存在。此時(shí)查詢這個(gè)外部表的時(shí)候,系統(tǒng)就會(huì)提示“對(duì)象不存在”的錯(cuò)誤信息。所以這個(gè)刪除目錄對(duì)象時(shí),數(shù)據(jù)庫(kù)系統(tǒng)缺乏一種檢查,此時(shí)只有數(shù)據(jù)庫(kù)管理員在刪除目錄對(duì)象時(shí),先手工確認(rèn)一下這個(gè)目錄對(duì)象是否存在其他的外部表。

  要了解這個(gè)信息,則可以通過(guò)查詢dba_external_locations。通過(guò)查詢這張表,系統(tǒng)會(huì)反映當(dāng)前所有的目錄對(duì)象以及相關(guān)的外部表,還會(huì)查詢出這些外部表所對(duì)應(yīng)的操作系統(tǒng)文件的名字。先查詢這張表格,確定要?jiǎng)h除的對(duì)象沒(méi)有其他關(guān)聯(lián)的外部表時(shí),再進(jìn)行刪除。否則的話,需要先確認(rèn)其他外部表的可用性。免得因?yàn)檎`刪除而導(dǎo)致外部表無(wú)法正常使用。

  限制五:對(duì)于操作系統(tǒng)平臺(tái)的限制。

  雖然Oracle數(shù)據(jù)庫(kù)是支持跨平臺(tái)的數(shù)據(jù)庫(kù)系統(tǒng),即同時(shí)支持Windows或者Linux等多種操作系統(tǒng)。但是在使用外部表的時(shí)候需要注意一個(gè)問(wèn)題,即在兩個(gè)操作系統(tǒng)上文本文件的存儲(chǔ)方式是不同的。如在Windows操作系統(tǒng)上利用txt文件建立了一個(gè)以逗號(hào)作為分隔符的文件,其一行一條記錄。但是在Linux操作系統(tǒng)上打開(kāi)的話,在其就可能使在同一行中顯示了。故為了數(shù)據(jù)庫(kù)系統(tǒng)能夠正確識(shí)別操作系統(tǒng)文件,最好這個(gè)操作系統(tǒng)文件能夠和Oracle數(shù)據(jù)庫(kù)系統(tǒng)部署在同一臺(tái)服務(wù)器上或者同一種操作系統(tǒng)上。否則的話,很可能因?yàn)楦袷降臎_突,而導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)無(wú)法正確讀取外部文件中的數(shù)據(jù)。

責(zé)任編輯:zoe
回到頂部
折疊
網(wǎng)站地圖

Copyright © 2000 - galtzs.cn All Rights Reserved. 北京正保會(huì)計(jì)科技有限公司 版權(quán)所有

京B2-20200959 京ICP備20012371號(hào)-7 出版物經(jīng)營(yíng)許可證 京公網(wǎng)安備 11010802044457號(hào)