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.\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-12-16 12:24:30

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

??Duplicate File Finder Pro mac(重复文件搜索软件)

?Duplicate File Finder Pro mac特别版是Mac平台上的一款好用的重复文件搜索软件,操作简单,使用方便,只需要三步就可以快速查找和删除重复文件,重复文件通常是浪费和不必要的,保持它们只是浪费宝贵的硬盘空间.Duplicate File Finder Pro mac能够轻松的为你的电脑删除隐藏着的重复文件.减轻电脑的内存空间的压力,加快运行速度. ?Duplicate File Finder Pro mac特别版下载路径:http://t.cn/AiYiK0Lw ?Dup

ETL工具kettle怎么进行增量数据抽取:一、通过标志位

在平时的操作过程中可能大家需要经常进行增量的数据抽取,方法有很多种,接下来几天讲给大家介绍几种我本人经常使用的几种方式:首先给大家介绍我最喜欢的一种,就是通过标志位:操纵方法如下,在源表中增加一个标识字段,比如tongbu,当然可以为它设个默认值N,然后我们再增加一个索引nvl(tongbu,'N'),增加索引是为了提高查询的速度,接下来我们来写具体的流程:我写的这个流程非常简单,有的朋友们会非常疑惑为什么我会有更新组件,先卖个关子咱们继续:在写 表输入中的sql时,我们引入了一个伪列gx,并赋

[转]Oracle 10g及pro*c相关问题及解决方法(转)

Oracle 10g及pro*c相关问题及解决方法 2008年08月21日 星期四 上午 11:21 最近一直在进行ORACLE 10g和PRO*C的学习. 其中遇到了不少的问题: 现列于此,已备他用. [注:我的linux版本是RHEL 5,Oracle版本是10g] 1.在ORACLE 10g 安装准备的过程中:缺少libXp.so.6依赖 上网搜过不少文章,但是都不是很好的解决 我自己摸索出一个解决方法: 在RHEL5的安装盘中找到libXp-1.0.0-8.i386.rpm,进行安装后,

linux下SVN忽略文件/文件夹的方法

linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录),如果报错请看下面 3. 打开的文件就是忽略列表文件了(默认是空的),每一行是一项,在该文件中输入temp,保存退出 4. svn st查看状态,temp的?状态已经消除了 如果在svn propedit svn:ignore .时报错:svn: None of the environment va

linux找不到动态链接库 .so文件的解决方法

如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形. 可以通过ldd命名来查看可执行文件依赖的动态链接库,如下(其中D为可执行程序): 其中的libjson_linux-gcc-4.6_libmt.so cannot found. 解决这个问题: (1)在系统中查找这个文件(当然要保证系统中已经有这个.so文件,只是查找路径没有设置正确而已): sudo find / -name libjson_linux-gcc

Linux服务器删除乱码文件和文件夹的方法

Linux服务器删除乱码文件和文件夹的方法 首页进入乱码文件所在文件夹由于php大势所趋,所以接触Linux服务器的机会越来越多.不同于Windows服务器,Linux服务器只支持数字.英文等字符,对中文字符没办法识别.所以导致我们打包上传文件解压之后出现中文乱码文件和文件夹.网上有很多解决的办法,但是今天亲测用find命令能快速删除乱码的文件和文件夹,所以跟大家分享一下. 使用ls -i命令找到文件或文件夹的节点编号 前面的就是节点号了,接下来使用find命令查询并且删除 -inum指根据节点

ios 7.1 7.1.1 半完美越狱后 电脑訪问手机越狱文件夹的方法

7.1和7.1.1因为越狱不成熟,半完美越狱后电脑上无法訪问系统越狱文件夹,如var usr 等等. 今天有些意外地发现,能够在电脑上使用手机的越狱文件夹我手机 i4 7.1.1 联通 半完美越狱,没装Afc2Add,也没装Appsync 附上  --->我的半完美越狱过程 好了,以下直接正题 一.前提,必须安装ifile!     打开ifile,并转到 /var/mobile/media 文件夹下,然后点击右上角的 [ 编辑 ]如图: 二.点左下角的 + 号创建,如图: 三.点 [ 类型],

linux几种快速清空文件内容的方法

linux几种快速清空文件内容的方法 几种快速清空文件内容的方法: $ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename $ echo "" > filename $ echo /dev/null > filename $ echo > filename $ cat /dev/null > filename

PHP加载另一个文件类的方法

加载另一个文件类的方法 当前文件下有a.php 和b.php,想要在class b中引入class a <?php    class a    {        public $name = 'zhouqi';        public function say()        {            echo 'hello '.$this->name;        }    } <?php    class b    {        //require('a.php'); 错