要先从filename文件里面取出一行,按照|分割好后,字段分别插入数据库里面。部分源代码如下:
void indestination(char *filename_dest)
{
EXEC SQL BEGIN DECLARE SECTION;
char csql[1024];
int sdest_id;
char dest_name[100];
int scarr_id;
int scount_id;
char count_code[8];
char dcode[4000] ;
char cal_type[2];
int sserv_type;
int seff_date;
int sexp_date;
int sup_date;
char up_by[30];
long long sirm_dest_id;
char commt[255];
EXEC SQL END DECLARE SECTION;
char dest_id[10],carr_id[6],count_id[6],serv_type[4], eff_date[9], exp_date[9], up_date[9], irm_dest_id[11];
char getstr[STR_SIZE],errMsg[1024];
FILE *fp_filename;
char *p;
memset(errMsg,0,1024);
memset(csql,0,1024);
memset(getstr,0,STR_SIZE);
if((fp_filename=fopen(filename_dest,"r"))==NULL)
perror("fopen");
sprintf(csql,"%s INSERT INTO DESTINATION(DESTINATION_ID,DESTINATION_NAME,CARRIER_ID,COUNTRY_ID,COUNTRY_CODE,DIALCODE,CALLEE_TYPE,SERVICE_TYPE,EFFECT_DATE,EXPIRE_DATE,UPDATE_DATE,UPDATE_BY,IRM_DESTINATION_ID,COMMENTS) ",csql);
sprintf(csql,"%s VALUES(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8,:v9,:v10,:v11,v12.:v13,:v14)",csql);
fgets(getstr,STR_SIZE,fp_filename);
while ( !feof(fp_filename ))
{
memset(dest_id,0,10);
memset(dest_name,0,100+1);
memset(carr_id,0,6);
memset(count_id,0,6);
memset(count_code,0,8+1);
memset(dcode,0,4000+1) ;
memset(cal_type,0,2);
memset(serv_type,0,4);
memset(eff_date,0,9);
memset(exp_date,0,9);
memset(up_date,0,9);
memset(up_by,0,30+1);
memset(irm_dest_id,0,11);
memset(commt,0,255+1);
if ((p=strtok(getstr,"|"))!= NULL)
strcpy(dest_id,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(dest_name , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(carr_id,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(count_id , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(count_code,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(dcode , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(cal_type,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(serv_type , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy( eff_date , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(exp_date,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(up_date,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(up_by,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(irm_dest_id , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(commt,p);
sdest_id=atoi(dest_id);
scarr_id=atoi(carr_id);
scount_id=atoi(count_id);
sserv_type=atoi(serv_type);
seff_date=atoi(eff_date);
sexp_date=atoi(exp_date);
sup_date=atoi(up_date);
sirm_dest_id=atoi(irm_dest_id);
EXEC SQL PREPARE S FROM :csql;
EXEC SQL EXECUTE S using :sdest_id,:dest_name,:scarr_id,:scount_id,:count_code,:dcode,:cal_type[0],:sserv_type,:seff_date,:sexp_date,:sup_date,:up_by,:sirm_dest_id,:commt;
if (sqlca.sqlcode!=0)
{
sprintf( errMsg,"insert error:%s,sqlca.sqlcode=%d",sqlca.sqlerrm.sqlerrmc,sqlca.sqlcode);
fputs(errMsg, fp_log);
printf( "%s",errMsg);
return;
} 查询的表格结构如下:
SQL> desc DESTINATION
Name Null? Type
----------------------------------------- -------- -----------------
DESTINATION_ID NOT NULL NUMBER(9)
DESTINATION_NAME NOT NULL VARCHAR2(100)
CARRIER_ID NOT NULL NUMBER(5)
COUNTRY_ID NOT NULL NUMBER(5)
COUNTRY_CODE VARCHAR2(8)
DIALCODE VARCHAR2(4000)
CALLEE_TYPE NOT NULL CHAR(1)
SERVICE_TYPE NOT NULL NUMBER(3)
EFFECT_DATE NOT NULL NUMBER(8)
EXPIRE_DATE NOT NULL NUMBER(8)
UPDATE_DATE NOT NULL NUMBER(8)
UPDATE_BY NOT NULL VARCHAR2(30)
IRM_DESTINATION_ID NUMBER(10)
COMMENTS VARCHAR2(255) 要插入的第一行数据:
240000|PAKISTAN CELLULAR PAKTEL|140|30|92|31|1|-1|20100801|20110201|20110131|admin|1505605|
void indestination(char *filename_dest)
{
EXEC SQL BEGIN DECLARE SECTION;
char csql[1024];
int sdest_id;
char dest_name[100];
int scarr_id;
int scount_id;
char count_code[8];
char dcode[4000] ;
char cal_type[2];
int sserv_type;
int seff_date;
int sexp_date;
int sup_date;
char up_by[30];
long long sirm_dest_id;
char commt[255];
EXEC SQL END DECLARE SECTION;
char dest_id[10],carr_id[6],count_id[6],serv_type[4], eff_date[9], exp_date[9], up_date[9], irm_dest_id[11];
char getstr[STR_SIZE],errMsg[1024];
FILE *fp_filename;
char *p;
memset(errMsg,0,1024);
memset(csql,0,1024);
memset(getstr,0,STR_SIZE);
if((fp_filename=fopen(filename_dest,"r"))==NULL)
perror("fopen");
sprintf(csql,"%s INSERT INTO DESTINATION(DESTINATION_ID,DESTINATION_NAME,CARRIER_ID,COUNTRY_ID,COUNTRY_CODE,DIALCODE,CALLEE_TYPE,SERVICE_TYPE,EFFECT_DATE,EXPIRE_DATE,UPDATE_DATE,UPDATE_BY,IRM_DESTINATION_ID,COMMENTS) ",csql);
sprintf(csql,"%s VALUES(:v1,:v2,:v3,:v4,:v5,:v6,:v7,:v8,:v9,:v10,:v11,v12.:v13,:v14)",csql);
fgets(getstr,STR_SIZE,fp_filename);
while ( !feof(fp_filename ))
{
memset(dest_id,0,10);
memset(dest_name,0,100+1);
memset(carr_id,0,6);
memset(count_id,0,6);
memset(count_code,0,8+1);
memset(dcode,0,4000+1) ;
memset(cal_type,0,2);
memset(serv_type,0,4);
memset(eff_date,0,9);
memset(exp_date,0,9);
memset(up_date,0,9);
memset(up_by,0,30+1);
memset(irm_dest_id,0,11);
memset(commt,0,255+1);
if ((p=strtok(getstr,"|"))!= NULL)
strcpy(dest_id,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(dest_name , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(carr_id,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(count_id , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(count_code,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(dcode , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(cal_type,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(serv_type , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy( eff_date , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(exp_date,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(up_date,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(up_by,p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(irm_dest_id , p);
if ((p=strtok(NULL,"|"))!= NULL)
strcpy(commt,p);
sdest_id=atoi(dest_id);
scarr_id=atoi(carr_id);
scount_id=atoi(count_id);
sserv_type=atoi(serv_type);
seff_date=atoi(eff_date);
sexp_date=atoi(exp_date);
sup_date=atoi(up_date);
sirm_dest_id=atoi(irm_dest_id);
EXEC SQL PREPARE S FROM :csql;
EXEC SQL EXECUTE S using :sdest_id,:dest_name,:scarr_id,:scount_id,:count_code,:dcode,:cal_type[0],:sserv_type,:seff_date,:sexp_date,:sup_date,:up_by,:sirm_dest_id,:commt;
if (sqlca.sqlcode!=0)
{
sprintf( errMsg,"insert error:%s,sqlca.sqlcode=%d",sqlca.sqlerrm.sqlerrmc,sqlca.sqlcode);
fputs(errMsg, fp_log);
printf( "%s",errMsg);
return;
} 查询的表格结构如下:
SQL> desc DESTINATION
Name Null? Type
----------------------------------------- -------- -----------------
DESTINATION_ID NOT NULL NUMBER(9)
DESTINATION_NAME NOT NULL VARCHAR2(100)
CARRIER_ID NOT NULL NUMBER(5)
COUNTRY_ID NOT NULL NUMBER(5)
COUNTRY_CODE VARCHAR2(8)
DIALCODE VARCHAR2(4000)
CALLEE_TYPE NOT NULL CHAR(1)
SERVICE_TYPE NOT NULL NUMBER(3)
EFFECT_DATE NOT NULL NUMBER(8)
EXPIRE_DATE NOT NULL NUMBER(8)
UPDATE_DATE NOT NULL NUMBER(8)
UPDATE_BY NOT NULL VARCHAR2(30)
IRM_DESTINATION_ID NUMBER(10)
COMMENTS VARCHAR2(255) 要插入的第一行数据:
240000|PAKISTAN CELLULAR PAKTEL|140|30|92|31|1|-1|20100801|20110201|20110131|admin|1505605|
里面的v12.写错了应该是“,”。