如何用C++产生SQL*Loader各类文件?

3小时前 (23:50:58)阅读1回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值117095
  • 级别管理员
  • 主题23419
  • 回复0
楼主

  以 下 是 用Borland C++ 5。0 在 中 文Windows 95 下 编 造 的 产 生CREATE TABLE SQL 语 句 和 产 生SQL*Loader 数 据 文 件、 控 造 文 件 的 源 程 序load。cpp。

#include

#include

#include

#include

#include

#include

#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 ;

typedef struct field // dbf字段构造

{ unsigned char name[11];

unsigned char type ;

unsigned long add;

unsigned char length;

unsigned char dec ;

} FIELD ;

int main(int argc,char **argv)

{ char buf[MAX_ROW_LENGTH],dbf[40],*sqlload;

unsigned int i,field_num;

HEAD *dbfhead ;

FIELD dbffield[MAX_FIELD_NUMBER];

FILE *fout, *fp;

if (argc!=2)

{ cout head_length-1)/32 -1 ; //字段个数

for( i=0; i  ctl");

if ((fout=fopen(sqlload,"w")) == NULL)

{ cout   txt'\n", argv[1]);

fprintf(fout,"INTO TABLE %s (\n", argv[1]);

for(i=0;i  name,

dbffield[i]。add, dbffield[i]。add + dbffield[i]。length -1 );

switch (dbffield[i]。type)

{ case 'C':

case 'L': // 字符型/ 逻辑型

fprintf(fout, " CHAR");

break ;

case 'N':

if (dbffield[i]。

  dec == 0 ) //整数型

fprintf(fout, "INTEGER EXTERNAL NULLIF %s = BLANKS",

dbffield[i]。name);

else //实数型

fprintf(fout, " DECIMAL EXTERNAL NULLIF %s =BLANKS",

dbffield[i]。

  name );

break;

case 'D': //日期型

fprintf(fout, " DATE 'YYYYMMDD' NULLIF %s = BLANKS",

dbffield[i]。name);

break;

default:

break;

if(i   的SQL 语 句

strcpy(sqlload,argv[1]);

strcat(sqlload,"。sql");

if ((fout=fopen(sqlload,"w")) == NULL)

{ cout   name);

switch (dbffield[i]。type)

{ case 'C': //字符型

fprintf(fout, " CHAR(%d)",dbffield[i]。length);

break;

case 'L': //逻辑型

fprintf(fout, " CHAR

(1)");

break;

case 'N': //数字型

if (dbffield[i]。

  dec==0)

fprintf(fout," NUMBER(%d)", dbffield[i]。length) ;

else

fprintf(fout, " NUMBER(%d,%d)",。

0
回帖

如何用C++产生SQL*Loader各类文件? 期待您的回复!

取消