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数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
随机推荐
- MySQL 数据热备份
mysqlhotcopy使用lock tables.flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能运行在数据库目录所在的机器上. 与 ...
- Jquery实现轮播公告
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jquery EasyUI Combotree 初始化赋值
Jquery EasyUI Combotree 初始化赋值 ================================ ©Copyright 蕃薯耀 2018年5月7日 https://www. ...
- JavaScript 运行机制详解:Event Loop
参考地址:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是 ...
- 这样使用 GPU 渲染 CSS 动画(转)
大多数人知道现代网络浏览器使用GPU来渲染部分网页,特别是具有动画的部分. 例如,使用transform属性的CSS动画看起来比使用left和top属性的动画更平滑. 但是如果你问,“我如何从GPU获 ...
- JS开发中常用的小技巧
1.获取指定范围内的随机数 1 2 3 function getRadomNum(min,max){ return Math.floor(Math.random() * (max - min ...
- [原]Django-issue(1)---postgresql数据库连接密码错误
环境: Django==1.9.13 psycopg2==2.7.5 Python 3.6.5 postgresql 1.18.1 配置django的时候出现问题 检查setting,问题点:由于安装 ...
- VS Code打开使用IDEA搭建的Spring Boot项目运行提示"snakeyaml was not found on the classpath"错误
今天用VS Code打开之前基于IDEA搭建并开发的Spring Boot项目,启动调试后出现如下错误: 17:43:05.214 [restartedMain] ERROR org.springfr ...
- Hibernate HQL一对多 在一方的查询
首先说一句:是版本的问题! 在多对多或者多对一,从一中查找多中查询某些语句时容易出现 我写的hql为: from Department as d where d.employees.name='Tom ...
- NYOJ - 矩形嵌套(经典dp)
矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...