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数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
随机推荐
- SQL查询无限层级结构的所有下级,所有上级
无限层级结构的table1表,Id(主键),ParentId(父级id)查询某个Id的所有下级或所有上级,使用WITH AS,UNION ALL 查询 1.查询Id为1所有的下级 WITH T AS( ...
- 在IE中启动火狐——自定义浏览器链接协议
有时候需求就是这么奇葩,特别是在这个浏览器混战收尾的节骨眼上,有的客户正在将全单位的浏览器统一到Chrome.有的正在统一到Firefox.还有的正在统一到360上.于是就有了如题的需求,客户正在将浏 ...
- docker 应用-1(安装以及基础命令)
Docker 安装 还是看官方文档吧TAT https://docs.docker.com/engine/getstarted/step_one/ 理解docker镜像和容器 镜像就是docker容器 ...
- 【Static Program Analysis - Chapter 4】格理论(Lattice Theory)与程序分析
# 从一个例子说起, **任务:给定这样一段代码,假设我们想分析出这段代码中,每个数值型变量和表达式的符号,即正数,负数或0.** 此外,还有可能出现两种情况就是: 1.我们无法分析出结果,即我们无法 ...
- nodejs & npm & gulp 安装和配置
熟悉 Hellolily的过程中,了解了这个. 环境: ubuntu 14.04 LTS 64bit 源码安装方式: 下载最新源码:如果被和谐请自行想办法. 解压并编译安装: cd node-xxx ...
- Water Buying
Water Buying time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun
原文地址 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcru ...
- ArcGIS Runtime For Android setViewpointCenterAsync(Point center, double scale)效果奇葩,不响应
最近做一个东西,用的是ArcGIS Runtime Sdk for Android 100.1.0,由于刚用这个版本,理解不够,出现了一个奇葩问题 在对FeatureLayer进行Query之后,想要 ...
- win 10安装Linux虚拟机教程
1.首先下载虚拟机 用的是VMware 官方下载地址:https://my.vmware.com/en/web/vmware/free#desktop_end_user_computing/vmwar ...
- ifcfg命令
ifcfg命令是一个bash脚本程序,用来设置Linux中的网络接口参数. 语法 ifcfg(参数) 参数 网络接口:指定要操作的网络接口: add/del:添加或删除网络接口上的地址: ip地址:指 ...