快速业务通道

用C++产生QL*Loader各类文件

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

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字段的转换。

4.SQL*Loader控制文件的建立

控制文件为SQL*Loader的核心文件,与Foxpro字段对应关系为表四:Foxpro数据类型

控制文件语句对应的格式

Character(n)

CHAR

Number(n,m)

Float(n,m)

DECIMAL EXTERNAL NULLIF < field > = BLANKS (m< >0)

INTEGER EXTERNAL NULLIF < field > = BLANKS  ( m=0)

Logical

CHAR

DATE

DATE "YYYYMMDD" NULLIF < field > = BLANKS

以 下 是 用Borland C++ 5.0 在 中 文Windows 95 下 编 制 的 产 生CREATE TABLE SQL 语 句 和 产 生SQL*Loader 数 据 文 件、 控 制

文 件 的 源 程 序load.cpp。

#include < stdio.h >
#include < stdlib.h >
#include < iostream.h >
#include < fstream.h >
#include < string.h >
#include < math.h >
#define MAX_ROW_LENGTH 1200
#define MAX_FIELD_NUMBER 30
typedef struct head     // dbf头文件结构
{ unsigned char mask ;
unsigned char date[3] ;
unsigned long record_num;
unsigned short int head_length;
unsigned short int field_length ;
} HEAD ;
typ

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号