ETL应用:使用Pro*C实现文件抽取的方法
2024-08-28 00:47:02
/*******************************************
***** 函数功能 :
***** 抽取数据库记录
*****
********************************************/
int extract_data(char *efilename,const char *sqlname)
{
FILE *fpWrite;
EXEC SQL BEGIN DECLARE SECTION;
varchar v_str_sql[+]; /*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();
}
/*声明游标处理方式*/
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 == )
{
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;
}
最新文章
- 开园第一篇 - 论移动开发环境 IOS与Android的差异
- kali linux 2016.1 滚动更新源
- System.Net.WebException : The remote server returned an error: (415) UNSUPPORTED MEDIA TYPE
- Restful是什么,SOAP Webservice和RESTful Webservice
- WebForm之FileUpload控件(文件上传)
- web.xml文件中配置<;mime-mapping>;下载文件类型
- 软件工程 speedsnail 冲刺2
- leetcode:Isomorphic Strings
- Looksery Cup 2015 A. Face Detection 水题
- struts2多文件上传(带进度条)demo+说明
- Difference between Tomcat&#39;s extraResourcePaths and aliases to access an external directory--转
- Jmeter接口压力测试
- 在.net下打造mongoDb基于官方驱动最新版本
- LeetCode链表解题模板
- TSPL学习笔记(2):过程和变量绑定
- 【2017-03-02】C#函数,递归法
- lambda表达式底层处理机制
- 在Python中进行自动化单元测试的教程
- 2017/05/20 java 基础 随笔
- StackPanel