码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-10-11 00:16:46      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

/*******************************************
*****  函数功能 :
*****      抽取数据库记录
*****
********************************************/
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;
}

 

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

标签:

原文地址:http://www.cnblogs.com/tychyg/p/4868561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!