数据库 proc编程五
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlca.h" //注意:在oracle中,如果使用char定长类型,那么数据库中的数据如果不足20,那么oracle默认以空格填充
//varchar是变长类型,不足20,oracle不会填充空格
//varchar本质上是typedef struct { unsigned short len; unsigned char arr[1]; } varchar;是个结构
//但是在做输入(例如insert into)的时候,char和varchar没有区别 EXEC SQL BEGIN DECLARE SECTION;
char *serverid="scott/123456@orcl"; int deptno1[];
char dname1[][];
char loc1[][]; int deptno2[];
varchar dname2[][];
varchar loc2[][]; int ida1[];
int idb1[];
char name1[][];
EXEC SQL END DECLARE SECTION; //错误处理升级函数
void sqlerr()
{
int ret=;
char stn[];
//sqlfc:SQL语句的实际长度
size_t sqlfc,stmlen=;
EXEC SQL WHENEVER SQLERROR CONTINUE;
ret=sqlgls(stn,&stmlen,&sqlfc);
if(ret!=)
{
printf("sqlgls() failed ! err code: %d\r\n",ret);
return ;
}
printf("出错的SQL语句是:%.*s\r\n",stmlen,stn);
printf("err reason:%.*s\r\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
} void main()
{
EXEC SQL WHENEVER SQLERROR DO sqlerr();
//连接数据库
EXEC SQL connect:serverid ;
printf("connect ok!\r\n");
//安装没有找到错误函数,没有找到数据(比如要查询100条数据,但是数据库只有5条),继续执行下一条语句
EXEC SQL WHENEVER NOT FOUND CONTINUE;
//执行多条查询--
//into关键字解释:因为要将查询出来的数据放入宿主变量中
EXEC SQL select deptno,dname,loc into :deptno2,:dname2,:loc2 from dept;
//sqlca.sqlerrd[2]获取SQL语句查询到的记录数
int count=sqlca.sqlerrd[];
//终端打印数据
int i=;
for(i=;i<count;i++)
{
printf("第%d条:deptno=%d,dname=%s,loc=%s\r\n",i,deptno2[i],dname2[i].arr,loc2[i].arr);
}
//批量插入
for(i=;i<;i++)
{
ida1[i]=i+;
idb1[i]=i*;
strcpy(name1[i],"hello");
}
//for 5:表示只插入5条数据
//bug提示:有时候insert 操作会卡住,这可能是由于表中已经有相同的主键了,约束下无法插入
EXEC SQL for insert into t2 values(:ida1,:idb1,:name1);
//提交断开连接
EXEC SQL COMMIT RELEASE;
system("pause");
}
数据库 proc编程五的更多相关文章
- 数据库 Proc编程二
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- 数据库 proc编程六
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- 数据库 proc编程四
错误处理机制 当在Pro*C/C++应用程序中运行SQL语句中,Oracle会将最近执行的SQL语句的状态信息存储到状态变量SQLCODE.SQLSTATE或者SQLCA结构中. 当SQL语句执行成功 ...
- 数据库 proc编程九
第一种动态sql EXEC SQL EXECUTE IMMEDIATE :psql; .仅适用于非select语句 .嵌入SQL语句中不能包含输入宿主变量 void main() { EXEC SQL ...
- 数据库 proc编程八
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- 数据库 proc编程七
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- 数据库 proc编程三
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- Oracle Proc编程性能优化经验
Proc 是Oracle提供的一种数据库操作的API.它是基于ESql技术的,需要预编译后才可以变成普通c代码,非常不直观,使用起来不太方便,阅读也存在困难. 因为这些问题导致程序员平时开发中会出现一 ...
- Linux网络编程(五)
/*Linux网络编程(五)——多路IO复用之select() 网络编程中,使用IO复用的典型场合: 1.当客户处理多个描述字时(交互式输入以及网络接口),必须使用IO复用. 2.一个客户同时处理多个 ...
随机推荐
- myeclipse报异常:java.lang.OutOfMemoryError: Java heap space
- itext处理pdf
http://www.java2s.com/Tutorial/Java/0419__PDF/DecryptPdffile.htm
- WCF学习笔记之并发与限流
最近一直在学习WCF相关知识:本文章将针对并发与限流知识进行一个梳理,由于很多理论的知识所以做一个简单的记录,为今后回顾做一个记录: 一:并发知识 WCF将服务实例封装在一个称为实例上下文的对象中,并 ...
- TWaver版3D化学元素周期表
非常早就有人做3D网页版的化学元素周期表了.酷炫效果和新奇技巧一度被众多粉丝奉为神明,争相研究和效仿.甚至有人放弃一切扑向这颗蜡烛.不由总是想到那个OPPO广告女主角拽拽的歧视道:"辞职去旅 ...
- powershell执行脚本
powershell执行脚本 执行powershell脚本有两种方式: 1.通过命令行参数启动脚本 C:\Windows\System32\WindowsPowerShell\v1.0\power ...
- iOS-开发者相关的几种证书(转)
分享一篇关于苹果开发者证书非常详细的解释. 哈哈,我太懒了,直接转发链接. iOS-开发者相关的几种证书
- Linux下源码安装JDK7
安装说明 安装环境:Red Hat Enterprise Linux7.1安装方式:源码安装 软件:jdk-7u80-linux-x64.gz 安装 #首先查看系统原有JDK信息 rpm -qa | ...
- 如何修改浏览器默认的alert样式?
window.alert = function(str) { var shield = document.createElement("DIV"); shield.id = &qu ...
- Eclipse删除文件的恢复(转)
与vs不同,在eclipse中删除的文件是不会放进回收站的, 很多人以为eclipse是直接在磁盘删除文件,所以一般都会用反删除软件恢复. 其实不必那么麻烦的,只要对着被删除文件的上一层目录按右键, ...
- 非super user管理会话
在gp中取消或者中断某个用户的超长时间或者SQL存在问题的会话.假设无法拥有超级用户将无法运行该类操作. 首先我们创建两个用户t1.t2,而且使用t1登录到数据库. [gpadmin@wx60 ~ ...