ETL应用:使用Pro*C实现文件抽取的方法

/*******************************************
*****  函数功能 :
*****      抽取数据库记录
*****
********************************************/
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.
",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
", 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,"数据已经抽取完成或是没有符合条件的数据!
");
                       break;
                    }
                   vc_expcol.arr[vc_expcol.len] = '