/******************************************* ***** 函数功能 : ***** 抽取数据库记录 ***** ********************************************/ int extract_data(char *efilename,const char *sqlname) { FILE *fpWrite; EXEC SQL BEGIN DECLARE SECTION; varchar v_str_sql[3000+1]; /*SQL语句 */ varchar vc_expcol[MAXLEN]; EXEC SQL END DECLARE SECTION; /**/ strcpy((char *)v_str_sql.arr,sqlname); v_str_sql.len=strlen((char*)v_str_sql.arr); #ifdef DEBUG printf("SQL语句%s.\n",v_str_sql.arr); #endif EXEC SQL WHENEVER SQLERROR GOTO prepare_exp_error; if ((fpWrite = fopen(efilename, "w+")) == NULL) { fprintf(stderr,"Cannot open data file %s\n", efilename); exit(1); } /*声明游标处理方式*/ EXEC SQL PREPARE sqlstmt FROM :v_str_sql; EXEC SQL DECLARE extract_cur CURSOR FOR sqlstmt; EXEC SQL OPEN extract_cur; for(;;) { /*提取数据*/ EXEC SQL FETCH extract_cur INTO :vc_expcol ; if (sqlca.sqlcode == 1403) { fprintf(stderr,"数据已经抽取完成或是没有符合条件的数据!\n"); break; } vc_expcol.arr[vc_expcol.len] = ‘\0‘; /*将输出数据记录到文件中*/ fprintf(fpWrite,"%s\n",vc_expcol.arr ); } /*关闭文件*/ fclose(fpWrite); /*关闭游标*/ EXEC SQL CLOSE extract_cur; return SUCCESS; prepare_exp_error: /*记录错误信息*/ fprintf(stderr,"\n%70s\n",sqlca.sqlerrm.sqlerrmc); fprintf(stderr,"数据库操作错误!退出!"); return FAILUER; }
时间: 2024-10-05 05:15:52