proc:基本数据库操作
导师布置了一作业:
int ConnectDB() {
/*connect to database*/
EXEC SQL BEGIN DECLARE SECTION;
char s_conn[];
EXEC SQL END DECLARE SECTION;
memset( s_conn, 0x00, sizeof( s_conn ));
sprintf( s_conn, "finance/oracle@orcl" );
EXEC SQL CONNECT :s_conn ;
if ( != sqlca.sqlcode) {
printf("failed!:%s\n", sqlca.sqlerrm.sqlerrmc);
exit();
}
else {
printf("success!:%s\n", sqlca.sqlerrm.sqlerrmc);
}
return ;
}
void insert(){
EXEC SQL BEGIN DECLARE SECTION;
char buf[][];
EXEC SQL END DECLARE SECTION;
static char input[]="2014-05-17,10022002,yannic,2014-05-17,incase,1000,1003,3,1,1,success";
int i=;
char *p=strtok(input,",");
while(p!=NULL)
{
strcpy(buf[i++],p);
p=strtok(NULL,",");
}
for(i=;i<;i++)
{
printf("%d %s \n",i,buf[i]);
}
/*将string转换为number*/
organization=atoi(buf[]);
money=atoi(buf[]);
user_account=atoi(buf[]);
user_id=atoi(buf[]);
state=atoi(buf[]);
answer_id=atoi(buf[]);
ConnectDB();
EXEC SQL insert into business values(,:buf[],:organization,:buf[],:buf[],:buf[],:money,:user_account,:user_id,:state,:answer_id,:buf[]);
if ( != sqlca.sqlcode) {
printf("[%s]\n",sqlca.sqlerrm.sqlerrmc );
}
EXEC SQL COMMIT WORK RELEASE; /* 提交事务并断开数据库连接 */
}
最后是查询了,要把结果生成报表输出到文件中,最麻烦的是要打印成Excel的样式,要很有耐心呢:
void selectDB()
{
FILE *fp;
int i=0;
ConnectDB(); /*定义游标*/
EXEC SQL DECLARE emp_cursor CURSOR FOR
select t.trade_date,t.channel,t.ORGANIZATION,
NVL(s.SUCCESS,0) as succeed,//查询成功的记录,如果没有就默认为0.使用函数NVL(字段,0),设置默认值为0.
NVL(s.success_money,0) as succeed_money,
(t.total-NVL(s.SUCCESS,0)) as FAIL,
(t.total_money-NVL(s.success_money,0)) as FAIL_MONEY
from VIEW_TOTAL t ,VIEW_SUCCESS s
where s.trade_date(+)=t.trade_date and s.channel (+)=t.channel and s.organization (+)= t.organization;//通过左连接,只要查询到有记录就要输出来。 EXEC SQL OPEN emp_cursor; /* 以覆盖的方式写数据到文件*/
if((fp=fopen("excel.txt","wt+"))==NULL)
{
printf("Cannot open file strike any key exit!");
exit(1);
} char column[][20]={{"TRADE_DATE"},{"CHANNEL"},{"ORGANZATION"},{"SUCCEED"},{"SUCCEED_MONEY"},{"FAIL"},{"FAIL_MONEY"}}; fputs(" TRADE INFORMATION\n",fp);
fputs(xline,fp);
for(i=0;i<7;i++)
{
fprintf(fp,"|%-21s",column[i]); }
fputs("|\n",fp);
fputs(xline,fp);//xline 是我宏定义的一行横线,方便后面使用。 for(;;){
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH emp_cursor INTO :trade_date,:channel,:organization,:succeed,:succeed_money,:fail,:fail_money;
fprintf(fp,"|%-21s|%-21s|%-21d|%-21d|%-21d|%-21d|%-21d|\n",trade_date,channel,organization,succeed,succeed_money,fail,fail_money);//控制每一列数据占位长度,用格式控制符.-代表左对齐,21代表每列占位21个字符。
fputs(xline,fp);
}
EXEC SQL CLOSE emp_cursor; EXEC SQL COMMIT WORK RELEASE;
fclose(fp); }
最后打印效果:

最后导师提出来了两个问题一个是char数组定义长度太小,真正项目中可能会来很长一字符串那就造成内存溢出。还有一个就是文件打开那儿我直接失败就退出,老师建议不要这样,实际项目中流程退出再重新建流程要初始化等会浪费资源,所以异常时关闭游标等资源好了,不释放这些资源的话时间长了会造成内存泄漏。
proc:基本数据库操作的更多相关文章
- 数据库操作语句大全(sql)
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
- ABP创建数据库操作步骤
1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- django数据库操作和中间件
数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...
- [Android Pro] 完美Android Cursor使用例子(Android数据库操作)
reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...
- phpcms v9 中的数据库操作函数
1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='') 返回 ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
随机推荐
- Android实现夜间模式
如今非常多App都有夜间模式,特别是阅读类的App.夜间模式如今已经是阅读类App的标配了,其实,日间模式与夜间模式就是给App定义并应用两套不同颜色的主题,用户能够自己主动或者手动的开启,今天用An ...
- Win2008R2+Apache+PHP+Tomcat配置
一.VC运行库 对于Apache和PHP,在Windows上运行的话都需要对应VC运行库的支持,即Apache.PHP和VC运行库这三者的版本必须相对应,这就会带来很多问题,比如下了较新的Apache ...
- Jquery EasyUI Combotree根据选中的值展开所有父节点
Jquery EasyUI Combotree根据选中的值展开所有父节点 Jquery EasyUI Combotree 展开父节点, Jquery EasyUI Combotree根据子节点选中的 ...
- 入围T00ls 2018风云人物
今天早上打开T00ls,发现成功入围了<T00ls第六届(2018)年度人物风云榜>,共34名年度人物,每个id可投10票,34选10. T00ls是当前国内为数不多的民间网络信息安全研究 ...
- JavaScript原型、闭包、继承和原型链等等总结
参考:http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B%E9%93%BE/
- 关于Intel漏洞的学习
这几天报道了Intel的漏洞,这里学习一下并做个记录. 报告:https://spectreattack.com/spectre.pdf #include <stdio.h> #inclu ...
- Mac OSX取消Apache(httpd)开机启动(转载)
启动服务时提示Apache启动失败,80端口被占用.查看进程发现存在几个httpd. OS X自带Apache,可是默认是没有启动的.我也没有开启Web共享,怎么就开机启动了呢? 不知道是不是因为安装 ...
- maven如何单独启动插件目标
说来恼火,在网上找了半天没找到 原来插件名称其实不需要定义而是直接想象到的,如下,我尝试过了好几种 mvn plugin:goal 都没成功:从代码看goal已经没啥疑问了,就是compile,但哪个 ...
- select 标签判断value值相同 就selected高亮
我写的是里面嵌套php标签 <select name="bq_id[]" multiple="multiple"> <volist name= ...
- ES6(六) --- Symbol
概述: ES5 中属性名都是字符串,这容易就造成命名的冲突,特别是在混入模式(mixin模式)下.为解决这个问题ES6 引入了Symbol, Symbol是一种新的基本数据类型,表示独一无二的值! ...