天地(常州)自動(dòng)化股份有限公司 劉建慶
ORACLE數(shù)據(jù)庫(kù)全稱為Or acl e Dat abase,是甲骨文公司開(kāi)發(fā)的一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),該技術(shù)在整個(gè)數(shù)據(jù)庫(kù)領(lǐng)域一直處于領(lǐng)先水平,是國(guó)內(nèi)外應(yīng)用廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng)。ORACLE數(shù)據(jù)庫(kù)屬于一種大型數(shù)據(jù)庫(kù)產(chǎn)品,其以SQL高級(jí)結(jié)構(gòu)化查詢語(yǔ)言為基礎(chǔ),支持關(guān)系模型的數(shù)據(jù)庫(kù),系統(tǒng)操作方便,可移動(dòng)性好,功能強(qiáng),可在各種大、中、小以及微機(jī)環(huán)境中運(yùn)行,不僅可以支持分布式客戶/服務(wù)器應(yīng)用、集中式結(jié)構(gòu),同時(shí)也具有分布式處理功能,可分布到多個(gè)平臺(tái)上運(yùn)行。ORACLE數(shù)據(jù)庫(kù)被認(rèn)為是世界上流行的一種高效、可靠以及科研適應(yīng)高吞吐量的數(shù)據(jù)庫(kù)管理系統(tǒng)。下面對(duì)ORACLE數(shù)據(jù)庫(kù)在煤炭企業(yè)中的主要應(yīng)用操心進(jìn)行探討。
ORACLE數(shù)據(jù)庫(kù)具有強(qiáng)大的數(shù)據(jù)檢索功能,用戶利用ORACLE數(shù)據(jù)庫(kù)可以快速的進(jìn)行數(shù)據(jù)檢索,準(zhǔn)確找到自己所需要的數(shù)據(jù)。而且ORACLE數(shù)據(jù)庫(kù)還具有較強(qiáng)的數(shù)據(jù)管理功能,可以有效保證數(shù)據(jù)的一致性、完整性以及數(shù)據(jù)信息的安全性。在煤炭其他的各個(gè)部門(mén)中數(shù)據(jù)量類型多,數(shù)量大,而且數(shù)據(jù)關(guān)系復(fù)雜,要進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)處理就需要借助Sql pl us工具,通過(guò)各種命令和函數(shù)的應(yīng)用來(lái)實(shí)現(xiàn)數(shù)據(jù)操作。下面介紹ORACLE數(shù)據(jù)庫(kù)中表連接查詢、數(shù)據(jù)刪除、查找以及相關(guān)函數(shù)的具體應(yīng)用。
ORACLE數(shù)據(jù)庫(kù)中表連接查詢常用到的查詢方法和命令是:
sql>select zd1,zd2,zd3,zd4 from表1 where表1.zd1 not in(select zd1 from表2);
因?yàn)镹OT IN運(yùn)算符的邏輯測(cè)試速度是相當(dāng)慢的,所以當(dāng)所查詢的表1和表2中的數(shù)據(jù)記錄較多,甚至有上千條、上萬(wàn)條記錄時(shí),仍采用才命令進(jìn)行數(shù)據(jù)查詢就需要較長(zhǎng)的時(shí)間才能完成。因此需要對(duì)NOT IN運(yùn)算符進(jìn)行替換,采用外鏈接進(jìn)行查詢,如此可大大縮短查詢時(shí)間,即使在數(shù)據(jù)記錄較多的情況下也比較方便。
如果需要將表1和表2中相同的數(shù)據(jù)記錄刪除,可以采用命令:
SQL>delete from a where exists (select*from b where a.zd1=b.zd1 and b.zd2=zd2);
SQL>delete from a where(zd1,zd2) in (select zd1,zd2 from b);
當(dāng)表中的數(shù)據(jù)量不大的情況下可以采用in子句命令,如果表中的數(shù)據(jù)量較大,且多至數(shù)十萬(wàn)條時(shí)采用in字句命令時(shí)速度回特別慢,所以此時(shí)有必要采用sel ect 子句命令。
在ORACLE數(shù)據(jù)庫(kù)的應(yīng)用中經(jīng)常會(huì)遇到查找多個(gè)表中不同的數(shù)據(jù)記錄,例如查找表1有,但表2中沒(méi)有的數(shù)據(jù)記錄,此時(shí)在選擇查找命令時(shí)需考慮的到速度問(wèn)題,通過(guò)對(duì)子句in命令和sel ect子句命令的比較,通常選擇以下命令比較理想:
SQL>select zd1 from a where not exists(select zd1 from b where a.zd1=b.zd1);
在ORACLE數(shù)據(jù)庫(kù)的應(yīng)用中,如果一個(gè)表中某一行的某列沒(méi)有值,便稱其為NULL(空值)。NOLL通常用來(lái)表示實(shí)際值未知或者無(wú)意義的情況。對(duì)于ORACLE數(shù)據(jù)庫(kù)中任意一種類型的列,只有沒(méi)有使用NOT NULL(非空)或者主鍵完整性受限,都允許存在空值。如果用戶在實(shí)際應(yīng)用操作中忽略了空值,很可能會(huì)導(dǎo)致不必要的麻煩。例如在20個(gè)表的數(shù)據(jù)記錄中,累計(jì)記錄為200,處于NULL值狀態(tài)的為10個(gè),如果使用函數(shù)avg()來(lái)運(yùn)算,因?yàn)榉帜钢胁话琋ULL值,所以結(jié)果是20。
采用nv1()函數(shù)可以解決ORACLE數(shù)據(jù)庫(kù)中存在NULL值的任何類型的數(shù)據(jù)計(jì)算。命令格式為nv1(數(shù)值型字段名,0)。nv1()函數(shù)用0來(lái)表示字段中可能產(chǎn)生的NULL值。例如:
SQL>up d ate表名set zd 1=nv 1(zd 2,0)+nv 1(zd3,0)+nv1(zd4,0)
nv1()函數(shù)在ORACLE數(shù)據(jù)庫(kù)中的應(yīng)用可以有效避免因?yàn)镹ULL值存在導(dǎo)致的計(jì)算錯(cuò)誤,這是在實(shí)際應(yīng)用中必須要注意的一點(diǎn)。
ORACLE數(shù)據(jù)庫(kù)的應(yīng)用過(guò)程中有時(shí)候?yàn)榱送瓿蓱?yīng)用要求需要將數(shù)據(jù)庫(kù)格式轉(zhuǎn)換為其他格式,例如foxpro格式或者dbase格式等等。下面簡(jiǎn)單介紹ORACLE數(shù)據(jù)庫(kù)轉(zhuǎn)換為foxpro/dbase格式的方法。首先利用Sql plus工具提取ORACLE數(shù)據(jù)庫(kù)的信息數(shù)據(jù),然后利用命令spool(重定向命令)將提取出來(lái)的數(shù)據(jù)保存在一個(gè)文本格式(temp.txt)的文件中。最后再編輯一個(gè)sql文件來(lái)運(yùn)行就可以實(shí)現(xiàn)。Sql文件的編輯例子:
sql> @文件名:
此文件主體內(nèi)容為:
spool c:/usxer/temp.txt
select zd1,zd2,zd3,zd4 from表where條件子句;
spool off
然后利用exce1軟件將所生成的文件打開(kāi),根據(jù)文本導(dǎo)入向?qū)崾景严惹暗奈谋靖袷剑╰emp.txt)文件轉(zhuǎn)化為exce1格式文件(temp.xls)。最后利用Foxpro的導(dǎo)入功能將exce1格式文件(temp.xls)打開(kāi),并將其轉(zhuǎn)換為數(shù)據(jù)庫(kù)文件(temp.dbf)。在數(shù)據(jù)庫(kù)格式的轉(zhuǎn)換過(guò)程中,如果將中間exce1格式的轉(zhuǎn)換非常重要,如果將這一轉(zhuǎn)換步驟省去極易造成數(shù)據(jù)轉(zhuǎn)換不完整的情況。ORACLE數(shù)據(jù)庫(kù)格式向Dbase格式轉(zhuǎn)換可以先在Dbase狀態(tài)下建立一個(gè)結(jié)構(gòu)與Oracle相同的數(shù)據(jù)庫(kù),將此數(shù)據(jù)庫(kù)打開(kāi)后再利用appe from temp sdf命令進(jìn)行處理即可實(shí)現(xiàn)格式轉(zhuǎn)換。
ORACLE數(shù)據(jù)庫(kù)自身提供有一個(gè)功能強(qiáng)大的管理器(oracle enterprise mananger),其中的數(shù)據(jù)管理項(xiàng)可以將數(shù)據(jù)庫(kù)以外的數(shù)據(jù)(例如dbf/Foxpro格式數(shù)據(jù))導(dǎo)入到ORACLE數(shù)據(jù)庫(kù)中,然后利用SQL*Loader處理即可。
Foxpro格式轉(zhuǎn)換為Oracle格式首先需要將數(shù)據(jù)導(dǎo)出Foxpro數(shù)據(jù)庫(kù),執(zhí)行操作“打開(kāi)file/export, 選擇delimited text,在to項(xiàng)中給出需要導(dǎo)出數(shù)據(jù)庫(kù)的數(shù)據(jù)文件名,在fro項(xiàng)選擇要導(dǎo)出的文件,并選擇文件存儲(chǔ)位置”。將Options對(duì)話框各項(xiàng)設(shè)置完成后點(diǎn)擊“OK”即可將文件導(dǎo)出。然后將數(shù)據(jù)文件編輯為控制文件格式,再將數(shù)據(jù)上傳到數(shù)據(jù)庫(kù)服務(wù)器即可。如果Foxpro的memo字段文件需要進(jìn)行格式轉(zhuǎn)換首先要利用copy memo命令將文件導(dǎo)出到文本,然后再執(zhí)行上述轉(zhuǎn)換操作。
dbf格式向Oracle格式轉(zhuǎn)換首先需要?jiǎng)?chuàng)建一個(gè)相同結(jié)構(gòu)的oracle table,將dbase數(shù)據(jù)
通過(guò)copy to文件名sdf命令轉(zhuǎn)換為源文件格式,然后編輯一個(gè)控制文件(.ctl)來(lái)定義源文件的路徑、目標(biāo)表文件名等屬性。下面給出控制文件(.ctl)的源程序(fe0.ctl):
-options(errors=200,rows=1320)
-continue_load data
load data
infi le”a:/temp.txt”
into table tem
append
(dhhm position(41:47)char,
hfny constant′200011′
chf position(48:58)decimal external nullif chf=
blanks,
shf position(59:69)decimal external nullif shf=
blanks,
nhf position(70:79)decimal external nullif nhf
=blanks
上述操作完成之后啟動(dòng)ORACLE數(shù)據(jù)庫(kù)的功能管理器,并在數(shù)據(jù)管理項(xiàng)中的(裝載)load項(xiàng)中定義控制文件名和log文件。裝載過(guò)程中如果出現(xiàn)無(wú)法完成裝載的異常數(shù)據(jù)均會(huì)被保存在特定的文件中,如果數(shù)據(jù)裝載失敗就可以查閱文件并查找問(wèn)題所在。
以上是對(duì)煤炭企業(yè)中ORACLE數(shù)據(jù)庫(kù)的主要應(yīng)用操作進(jìn)行探討。ORACLE數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)是一個(gè)高性能的大型關(guān)系數(shù)據(jù)庫(kù),所以用來(lái)支持ORACLE數(shù)據(jù)庫(kù)正常運(yùn)行的后臺(tái)系統(tǒng)規(guī)模也比較龐大。ORACLE數(shù)據(jù)庫(kù)設(shè)計(jì)和編碼完成之后投入使用就很難進(jìn)行重新設(shè)計(jì)和編碼,所以O(shè)RACLE數(shù)據(jù)庫(kù)在使用之前需要明確掌握數(shù)據(jù)庫(kù)的應(yīng)用,進(jìn)行準(zhǔn)確定位。
[1]崔燕.Oracle數(shù)據(jù)庫(kù)的應(yīng)用[J].中外企業(yè)家,2015(15):176-176.
[2]李璐璐.Oracle數(shù)據(jù)庫(kù)優(yōu)化方法分析[J].硅谷,2014(24):31-32.
[3]初宗榮.Oracle數(shù)據(jù)庫(kù)應(yīng)用中存在的問(wèn)題及優(yōu)化策略[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(3):11-12.
[4]郭宇.大數(shù)據(jù)時(shí)代下Oracle數(shù)據(jù)庫(kù)在汽車(chē)制造業(yè)MIS系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2015(1):169-170.
[5]郭鳳清.探討oracle數(shù)據(jù)庫(kù)日常維護(hù)與優(yōu)化[J].科技風(fēng),2014(24):120-120.
[6]張?jiān)鲫?yáng).關(guān)于Oracle數(shù)據(jù)庫(kù)基礎(chǔ)設(shè)計(jì)與優(yōu)化設(shè)計(jì)的研究[J].信息系統(tǒng)工程,2013(1):41,54.
[7]涂云杰.Oracle數(shù)據(jù)庫(kù)技術(shù)在煤礦安全監(jiān)控中的應(yīng)用[J].煤炭技術(shù),2013(5):71-73.
[8]Oracle數(shù)據(jù)庫(kù)在煤炭企業(yè)中的應(yīng)用[J].信息技術(shù),2001(5).