王光營(yíng) 任芳
摘要著重介紹目前基于Oracle數(shù)據(jù)庫(kù)的陜西氣象業(yè)務(wù)庫(kù)中在數(shù)據(jù)統(tǒng)計(jì)分析中存在的不規(guī)則字符串的問(wèn)題,并提出了通過(guò)自建判斷函數(shù)的有效辦法,解決了統(tǒng)計(jì)大量數(shù)據(jù)中經(jīng)常出現(xiàn)的錯(cuò)誤。
關(guān)鍵詞Oracle;氣象數(shù)據(jù)庫(kù);異常數(shù)據(jù);解決方案
中圖分類號(hào)S164文獻(xiàn)標(biāo)識(shí)碼A文章編號(hào)0517-6611(2014)04-01107-01
作者簡(jiǎn)介王光營(yíng)(1980-),男,山東高唐人,工程師,碩士,從事專業(yè)氣象應(yīng)用的研究與開發(fā)工作。
目前陜西省已建成100個(gè)自動(dòng)氣象觀測(cè)站、1 432個(gè)區(qū)域觀測(cè)站和酸雨等特種觀測(cè)站,這些站點(diǎn)可以連續(xù)自動(dòng)測(cè)量溫度、濕度、氣壓、降水等氣象要素,觀測(cè)的數(shù)據(jù)會(huì)及時(shí)傳輸?shù)绞【植⒋嫒霕I(yè)務(wù)數(shù)據(jù)庫(kù)中。由于數(shù)據(jù)量非常大,業(yè)務(wù)數(shù)據(jù)庫(kù)選用的是性能強(qiáng)大的Oracle數(shù)據(jù)庫(kù),但由于自動(dòng)站數(shù)據(jù)也會(huì)發(fā)來(lái)一些異常的數(shù)據(jù),致使在使用SQL語(yǔ)句進(jìn)行統(tǒng)計(jì)分析數(shù)據(jù)的時(shí)候常被這樣問(wèn)題困擾。在此,筆者著重介紹Oracle數(shù)據(jù)庫(kù)陜西氣象業(yè)務(wù)庫(kù)在使用時(shí)存在的異常數(shù)據(jù)問(wèn)題,并提出了解決方案,以提高工作效率和質(zhì)量,保證系統(tǒng)的正常運(yùn)轉(zhuǎn)。
1 基于ORACLE的氣象業(yè)務(wù)數(shù)據(jù)庫(kù)系統(tǒng)概述
Oracle數(shù)據(jù)庫(kù)是一種大型數(shù)據(jù)庫(kù)系統(tǒng),一般應(yīng)用于商業(yè)、政府部門,它的功能很強(qiáng)大,能夠處理大批量的數(shù)據(jù),在網(wǎng)絡(luò)方面也廣泛應(yīng)用。Oracle數(shù)據(jù)庫(kù)管理系統(tǒng)是一個(gè)以關(guān)系型和面向?qū)ο鬄橹行墓芾頂?shù)據(jù)的數(shù)據(jù)庫(kù)管理軟件系統(tǒng),其在管理信息系統(tǒng)、企業(yè)數(shù)據(jù)處理、因特網(wǎng)及電子商務(wù)等領(lǐng)域有非常廣泛的應(yīng)用。ORACLE數(shù)據(jù)庫(kù)具有眾多的先進(jìn)特性,支持多種硬件平臺(tái)、操作系統(tǒng)和網(wǎng)絡(luò)平臺(tái),提供業(yè)界真正的透明應(yīng)用群集并行處理技術(shù),達(dá)到B2級(jí)安全標(biāo)準(zhǔn)[1]。
氣象數(shù)據(jù)庫(kù)系統(tǒng)作為氣象信息共享平臺(tái)的重要管理系統(tǒng),其體系結(jié)構(gòu)和技術(shù)的復(fù)雜程度均是前所未有的,需要在集約化和標(biāo)準(zhǔn)化原則下,充分利用成熟的商業(yè)數(shù)據(jù)庫(kù)技術(shù)和大氣科學(xué)領(lǐng)域的相關(guān)技術(shù)加以構(gòu)建。同時(shí),氣象數(shù)據(jù)庫(kù)系統(tǒng)管理大量的、來(lái)自于不同業(yè)務(wù)軌道、具有不同屬性的氣象數(shù)據(jù),并為業(yè)務(wù)、科研以及政府、公眾等各用戶提供快捷方便的數(shù)據(jù)服務(wù),所有數(shù)據(jù)資源和應(yīng)用系統(tǒng)均需要集成在統(tǒng)一的平臺(tái)框架內(nèi)且為用戶提供全局?jǐn)?shù)據(jù)導(dǎo)航和獲取接口[2]。氣象業(yè)務(wù)數(shù)據(jù)特點(diǎn)是數(shù)據(jù)量大、并發(fā)處理量大、時(shí)效要求高,同時(shí)對(duì)數(shù)據(jù)的安全性有較高的要求?;跇I(yè)務(wù)系統(tǒng)的特點(diǎn),其他小型數(shù)據(jù)庫(kù)較難滿足需求,因此,氣象數(shù)據(jù)庫(kù)采用0RACLE 10g for UNIX。
2 自動(dòng)站業(yè)務(wù)數(shù)據(jù)庫(kù)中存在的問(wèn)題
自動(dòng)氣象站是目前氣象系統(tǒng)投入運(yùn)行的自動(dòng)化業(yè)務(wù)系統(tǒng),它能完成氣象數(shù)據(jù)的自動(dòng)采集、存儲(chǔ)、編制報(bào)表及資料審核和信息化處理。它可以連續(xù)自動(dòng)測(cè)量溫度、濕度、氣壓、降水等氣象要素。自動(dòng)站業(yè)務(wù)數(shù)據(jù)庫(kù)存入的數(shù)據(jù)是解析自動(dòng)站數(shù)據(jù)原始文本文件而入庫(kù)的,由于自動(dòng)站數(shù)據(jù)的缺測(cè)以及其他問(wèn)題造成了數(shù)據(jù)是以不規(guī)則字符串組成的,有的字符是“///”、有的是“-”,還有的是其他一些不可預(yù)知字符組成的字符串,這樣在對(duì)數(shù)據(jù)值統(tǒng)計(jì)和寫SQL語(yǔ)句時(shí),容易出現(xiàn)很多的錯(cuò)誤,如求雨量的和,用到的sum函數(shù),求溫度的平均值用AVG函數(shù),如統(tǒng)計(jì)7月份全省自動(dòng)站總的降水量時(shí)用到的SQL語(yǔ)句:select sum(rain) from awsTable where dataTime=201107,包含這些函數(shù)的SQL語(yǔ)句在執(zhí)行的時(shí)候大多均會(huì)報(bào)錯(cuò),因?yàn)樗龅搅四切┎灰?guī)則的字符串。在SQL Server數(shù)據(jù)庫(kù)中,這種問(wèn)題可以用isnumber()函數(shù)進(jìn)行判斷這個(gè)數(shù)據(jù)是否為數(shù)字,而在Oracle數(shù)據(jù)庫(kù)中沒有這樣的函數(shù),當(dāng)遇到異常字符時(shí)就會(huì)出現(xiàn)如下錯(cuò)誤信息:Error Message: ORA-01722 invalid number,即將字符串轉(zhuǎn)換為數(shù)字出錯(cuò)了,關(guān)鍵的是Oracle里面沒有SQL Server里面的類似函數(shù)is_number來(lái)判斷能否轉(zhuǎn)換為數(shù)字。
3 解決方案
用過(guò)SQL Server數(shù)據(jù)庫(kù)的對(duì)isnumber()函數(shù)均有一定的了解,這是一個(gè)常用的判斷輸入?yún)?shù)是否為數(shù)字的函數(shù)。而在Oracle中沒有現(xiàn)成的判斷是否為數(shù)字函數(shù),就需要通過(guò)Oracle的自定義函數(shù)來(lái)實(shí)現(xiàn)這個(gè)功能。下面來(lái)介紹一下如何用3種方法來(lái)將其實(shí)現(xiàn)[3]。