1.前言
目前,我國許多單位MIS系統建立在微機PC或基於NovellNetWare局域網環境中,數據庫和開發工具采用Foxpro2.5 for DOS或Foxpro 2.5 for Windows,以dbf文件為數據組織管理手段,隨著系統的不斷擴大和實際應用的需要,不少單位已開始采用大型數據庫Oracle。在MIS從Foxpro升級到大型數據庫Oracle過程中,將Foxpro的dbf文件通過Oracle工具SQL*Loader加載到Oracle數據庫中是一項非常重要的工作。一般用SQL*Loader加載的具體實施步驟是:
* 運行Foxpro,打開數據庫,將dbf文件拷貝為SDF格式的文本文件
* 根據dbf文件結構,產生建立Oracle表(CREATETABLE)的SQL語句
* 登錄Oracle,運行產生Oracle表(CREATETABLE)的SQL語句
* 根據dbf文件結構,產生SQL*Loader的控制文件
* 運行SQL*Loader,加載數據
用手工方法產生CREATETABLE的SQL語句,特別是產生SQL*Loader控制文件時,POSITION起始、結束位置經常弄錯,當需要加載大量的數據時,
不但煩瑣,而且效率比較低。我們在實踐中利用BorlandC++5.0編制了一個C++實用程序load.cpp,自動產生SQL*Loader的數據文件、控制文件和產
生CREATETABLE的SQL語句。運用load,我們只需:
* load<數據庫名>
* 登錄Oracle,運行產生Oracle表(CREATETABLE)的SQL語句
* 運行SQL*Loader,加載數據
在實踐中,我們通過這種方法,在實現從Foxpro到OracleforDigitalUNIX+中文Windows95的client/server平台的數據加載過程中提高了效率。
2.Foxpro中dbf文件結構
dbf文件由文件頭和文件記錄組成,其中文件頭又由數據庫說明和字段說明組成。數據庫說明由32個字節組成,各字節含義如下:
字節 含義
0 數據庫文件標志有無備注型字段(03H無)
1-3 最後一次修改日期
4-7 文件記錄數
8-9 文件頭長度
10-11 記錄長度
12-31 未用
字段說明由若干個32字節組成,每32字節說明一個字段,各字節含義如下:
字節 含義
0-10 字段名
11 字段類型
12-15 該字段在文件首記錄中的地址
16 字段長度
17 小數位數
18-31 未用
文件記錄以ASCII形式存儲,每條記錄以空格(20H)開頭,該空格用來作刪除標志用。
三
【注】:
* 不考慮完整性約束,同時對於TABLESPACE及STORAGE存儲參數取缺省值。
* 對於數字型字段,n表示數字的寬度,在Foxpro中包含小數點位置,而在Oracle中不包含。
* 對於Foxprological型字段類型,由於Oracle中沒有相應的邏輯型變量,故將其轉換為字符類型。
* 暫且不考慮memo、general、picture字段的轉換。