#ifndef _MYOCI_H_
#define _MYOCI_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <ocidfn.h>
#include <ocidem.h>
#ifdef __STDC__
#include "ociapr.h"
#else
#include "ocikpr.h"
#endif
#include "mylib.h"
/*一些工具宏*/
#ifndef FREE(x)
#define FREE(x) {if((x)!=NULL){free((x));(x)=NULL;}}
#define STRLEN(x) ((x)!=NULL?strlen((x)):0)
#endif
#ifndef FALSE
#define FALSE (0)
#define TRUE (!FALSE)
#endif
#define OCIERRNO -1
/*底层调用模式的宏,如果定义了改宏,则先对每一个参数进行条件判断,之后直接调用OCI的底层函数*/
#ifndef __MYOCI_CALLORAOCI__
#define __MYOCI_CALLORAOCI__
#endif
/*主机数据,私有不可以访问,否则出错*/
typedef ub1 OCIhda;
/*OCI版本*/
#define OCI_VERSION 2
/*错误集合*/
#define ERRORMSG_LEN 1024
#define ERRORSQL_LEN 1024
#define ERRORFUN_LEN 20
typedef struct OCIOraError{
//text _sql[ERRORSQL_LEN+1];
text _errmsg[ERRORMSG_LEN+1];
ub2 _errno;
text _errfun[ERRORFUN_LEN+1];
time_t _errtm;
}OCIOraError;
#define OCI_ORACONN 0xfff0
#define OCI_ORADISCONN 0xfff1
/*ORACLE本地连接数据句柄*/
typedef struct OCILocalDataArea{
struct cda_def _lda;/*OCI本地数据结构*/
ub1 _hda[HDA_SIZE];/*OCI主机数据结构*/
text *_ora;/*主机连接字符串*/
text *_pwd;/*主机连接密码*/
OCIOraError _error;/*本地数据结构错误信息*/
OCIOraError _curerror;/*光标结构错误信息*/
sword _isconn;/*连接状态*/
}OCIHandle;
/*光标数据句柄*/
/*非延迟分析*/
#define OCI_NODELAYPARSE 0
/*延迟分析*/
#define OCI_DELAYPARSE (!OCI_NODELAYPARSE)
#define OCI_CUROPEN 0xfff2
#define OCI_CURCLOSE 0xfff3
typedef struct OCICurseDataArea{
struct cda_def _cda;
text *_sql;
sword _mode;
OCIOraError _error;
sword _isopen;
}OCICda;
/*错误处理*/
/*从句柄或光标中得到错误,如果有错误发生则返回真*/
extern int OCIGetOraErr(OCIHandle *,OCICda *);
/*是否出错*/
extern int OCIIsOraErr(const OCIOraError *);
/*打印错误*/
extern void OCIPrintOraErr(const OCIOraError *);
/*
初始化句柄
*/
OCIHandle *OCIInitHandle(OCIHandle *);
/*是否初始化连接句柄*/
extern int OCIIsInitORA(OCIHandle *);
/*连接数据库并存储密码*/
extern int OCIConnORA(OCIHandle *,const char *,const char *);
/*是否连接数据库*/
extern int OCIIsConnORA(OCIHandle *);
/*关闭数据库连接*/
extern int OCICloseORA(OCIHandle *);
/*提交事务*/
extern int OCICommORA(OCIHandle *);
/*回滚事务*/
extern int OCIRollORA(OCIHandle *);
/*得到影响的行数*/
extern int OCIGetEffectedRows(OCIHandle *);
/*执行语句*/
extern int OCIExecSQL(OCIHandle *,const char *);
/*打开一个光标*/
extern OCICda *OCIOpenCDA(OCIHandle *,OCICda *);
/*是否为有效光标*/
extern int OCIIsOpenCDA(OCICda *);
/*分析语句子函数,OCI7非延迟分析*/
extern int OCIParseSQLNoDelay(OCICda *,const char *);
/*分析语句子函数,OCI7延迟分析*/
extern int OCIParseSQLDelay(OCICda *,const char *);
/*打开光标并分析语句*/
extern OCICda *OCIOpenCDAParseSQL(OCIHandle *,OCICda *,const char *,unsigned);
/*分析语句*/
extern int OCIParseSQL(OCICda *,const char *,unsigned);
/*执行光标对象*/
extern int OCIExecCDA(OCICda *);
/*执行光标对象,绑定的变量是数组,并从指定位置提取*/
extern int OCIExecCDAVarArray(OCICda *,unsigned,unsigned);
#define OCIExecCDAVA(x,y) OCIExecCDAVarArray((x),(y),0)
/*关闭光标*/
extern int OCICloseCDA(OCICda *);
/*绑定变量操作集合*/
/*绑定变量的最大数据成员数*/
#define OCIVARPARAM_MAXMEMBERS 32521
#define OCIVARPARAM_SCALE 2
#define OCIVarSetInit(x) init_dlink((x));
#define OCIVAR_SCALAR 0001
#define OCIVAR_ARRAY 1110
#define OCIVAR_MEMALL 0010
#define OCIVAR_NOMEMALL 1101
/*各个ORACLE外部数据类型的默认字串长度*/
#define OCINUMBER_STRLEN 22
#define OCIFLOAT_STRLEN 38
#define OCIINT_STRLEN 10
#define OCIDATA_STRLEN 20
#define OCIVAR_STRLEN 20
#define OCITIMESTAMP_STRLEN 50
/*实变量属性*/
typedef struct OCIVarParam{
sword _var_pos;/*虚变量索引*/
text *_var_name;/*虚变量名*/
sword _data_type;/*数据类型*/
sword _data_bingtype;/*绑定数据类型*/
void *_data_addr;/*数据元素地址,in/out*/
sword _mem_maxsize;/*元素最大字节数*/
ub2 *_datalen_addr;/*每个元素的所占字节数地址,in/out*/
sb2 *_ind_addr;/*每个元的指示器地址,in/out*/
ub2 *_recode_addr;/*返回码地址,out*/
ub4 _max_members;/*最大成员数,标量为0*/
ub4 _real_members;/*真实成员数,标量为0,in/out*/
sb2 _scale;/*数据的标度*/
}OCIVarParam;/*实变量属性*/
/*初始化实变量属性*/
extern OCIVarParam *OCIVarParamInit(OCIVarParam *,/*实变量属性*/
const char *,/*绑定变量名称*/
unsigned,/*数据类型*/
unsigned,/*数组或串变量的维数*/
unsigned/*数组或串变量成员的最大字节数*/);
/*设置实变量属性,数据位置,数据(字符串形式)*/
extern int OCISetVarParamValue(OCIVarParam *,unsigned,const char *);
/*通过数据位置得到实变量属性,数据(字符串形式)*/
extern void *OCIGetVarParamValue(OCIVarParam *,unsigned);
/*设置数据的标度*/
extern void OCISetVarParamScale(OCIVarParam *,unsigned short);
/*销毁实变量属性*/
extern void OCIDestroyVarParam(OCIVarParam *);
/*绑定实变量,占位符为数字*/
extern int OCIBingbyIndex(OCICda *,unsigned,unsigned,void *,size_t,short *);
/*绑定实变量,占位符为字符串*/
extern int OCIBingbyName(OCICda *,const char *,unsigned,void *,size_t,short *);
/*绑定实变量,占位符为数字,得到绑定变量属性*/
extern OCIVarParam *OCIBingbyIndex2VarParam(OCICda *,
int,/*虚变量索引位置*/
unsigned,/*ORACLE外部数据类型*/
unsigned,/*数组或串变量的维数*/
unsigned,/*数组或串变量的成员的最大字节数*/
OCIVarParam *);
/*绑定实变量,占位符为字符串,得到绑定变量属性*/
extern OCIVarParam *OCIBingbyName2VarParam(OCICda *,
const char *,/*虚变量名称*/
unsigned,/*ORACLE外部数据类型*/
unsigned,/*数组或串变量的维数*/
unsigned,/*数组或串变量的成员的最大字节数*/
OCIVarParam *);
/*从有效的绑定变量属性绑定实变量,占位符为数字*/
extern int OCIBingbyIndex4VarParam(OCICda *,OCIVarParam *);
/*从有效的绑定变量属性绑定实变量,占位符为字符串*/
extern int OCIBingbyName4VarParam(OCICda *,OCIVarParam *);
/*绑定实变量,占位符为字符串,得到绑定变量属性,该函数主要用于PL/SQL块的虚变量绑定*/
extern OCIVarParam *OCIBing4PLSQL2VarParam(OCICda *,
const char *,/*绑定变量名称*/
unsigned,/*数据类型*/
unsigned,/*数组或串变量的维数*/
unsigned,/*数组或串变量成员的最大字节数*/
OCIVarParam *);
/*从有效的绑定变量属性绑定实变量,占位符为字符串,该函数主要用于PL/SQL块的虚变量绑定*/
extern int OCIBing4PLSQL4VarParam(OCICda *,OCIVarParam *);
/*表项操作*/
/*字段名称长度*/
#define FIELDNAME_LEN 30
/*字段属性*/
typedef struct OCIOraFieldParamter{
sb4 _namelen;/*列名缓冲长度*/
text _name[FIELDNAME_LEN];/*列名*/
sb4 _dblength;/*数据库字段长度*/
sb2 _dbtype;/*数据库类型*/
sb4 _rtlength;/*列名真实长度*/
sb4 _maxlength;/*列名显示最大值*/
sb2 _prec;/*列属性:精度*/
sb2 _scale;/*列属性:标度*/
sb2 _isnull;/*列属性:是否可以为NULL值*/
sword _pos;/*列在表项中的位置*/
}OCIFieldParam;
/*字段值属性*/
typedef struct OCIOraFieldValue{
void *_value;/*列值空间地址*/
ub2 _valuelen;/*每个列值的预设长度,字节为单位*/
ub2 _members;/*列值数组的维数*/
ub2 *_revaluelen;/*每个列值的真实长度*/
sb2 *_ind;/*指示器*/
ub2 *_rcode;/*返回错误码*/
sword _outtype;/*输出类型*/
sword _pos;/*列在表项中的位置*/
unsigned _fetchrows;/*提取的数据维数*/
}OCIFieldVal;
/*得到字段属性*/
extern OCIFieldParam *OCIGetFieldParam(OCICda *,unsigned,OCIFieldParam *);
/*初始化字段值属性*/
extern OCIFieldVal *OCIFieldValInit(OCIFieldVal *,
unsigned,/*位置*/
unsigned,/*内部数据类型*/
unsigned,/*数组或串变量的维数*/
unsigned/*STRING/VARCHAR2类型的数据长度*/);
/*绑定字段值属性*/
extern OCIFieldVal *OCIDefineFieldVal(OCICda *,
unsigned,/*位置*/
unsigned,/*内部数据类型*/
unsigned,/*数组或串变量的维数*/
unsigned,/*STRING/VARCHAR2类型的数据长度*/
OCIFieldVal *);
/*绑定字段值属性通过已得到的字段属性*/
extern OCIFieldVal *OCIDefineFieldValbyParam(OCICda *,
OCIFieldParam *,/*有效的字段属性变量*/
unsigned,/*数组或串变量的维数*/
OCIFieldVal *);
/*销毁绑定字段值属性*/
extern void OCIDestroyFieldVal(OCIFieldVal *);
/*提取数据*/
/*字段属性和值�
c语言解析csv,oracle_oci接口封装
4星 · 超过85%的资源 需积分: 43 11 浏览量
2012-05-15
11:22:39
上传
评论
收藏 21KB RAR 举报
德阳凯子哥
- 粉丝: 37
- 资源: 15
最新资源
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈