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