#include <sqltypes.h>
typedef short int SWORD;
...others
/* SQL portable types for C */
typedef unsigned char UCHAR;
typedef signed char SCHAR;
typedef SCHAR SQLSCHAR;
typedef long int SDWORD;
typedef short int SWORD;
typedef unsigned long int UDWORD;
typedef unsigned short int UWORD;
#ifndef _WIN64
typedef UDWORD SQLUINTEGER;
#endif
typedef short int SWORD;
...others
/* SQL portable types for C */
typedef unsigned char UCHAR;
typedef signed char SCHAR;
typedef SCHAR SQLSCHAR;
typedef long int SDWORD;
typedef short int SWORD;
typedef unsigned long int UDWORD;
typedef unsigned short int UWORD;
#ifndef _WIN64
typedef UDWORD SQLUINTEGER;
#endif
typedef signed long SLONG;
typedef signed short SSHORT;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef double SDOUBLE;
typedef signed short SSHORT;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef double SDOUBLE;
一、OCI是什么 ?
OCI是一组底层的API(应用程序接口),主要和Oracle数据库进行交互。你可以调用一些操作如 logon , execute, parse, fecth 等等。OCI支持大数据语言,通常使用C/C++。与Oracle Pro*C等不同,OCI不需要预编译。
OCI比Pro*C的一些优势:
OCI的性能十分出
代码大量缩减
对内置函数直接访问
OCI的性能十分出
代码大量缩减
对内置函数直接访问
对LONG类型的分段操作(可以处理LONG相关的任何错误)
Pro*C不能为绑定变量动态分配内存
不能控制Pro*C自动生成的代码
Pro*C不能为绑定变量动态分配内存
不能控制Pro*C自动生成的代码
OCI开发流程:
连接多个数据库:使用OCILogon (olog, olon or orlon)
打开游标:oexec, oexn, ofen 或者 oftech
执行相应SQL语句
关于游标:oclose
断开连接:ologoff
打开游标:oexec, oexn, ofen 或者 oftech
执行相应SQL语句
关于游标:oclose
断开连接:ologoff
二、各个函数介绍:
1.创建OCI环境
sword OCIEnvCreate(
OCIEnv **envhpp, //OCI环境句柄指针
sword OCIEnvCreate(
OCIEnv **envhpp, //OCI环境句柄指针
ub4 mode, //初始化模式:OCI_DEFAULT/OCI_THREADED 等
CONST dvoid *ctxp,
CONST dvoid *(*malicfp)(dvoid *ctxp,size_t size),
CONST dvoid *(ralocfp)(dvoid *ctxp,dvoid *memptr,size_t newsize),
CONST void *(*mfreefp)(dvoid *ctxp,dvoid *memptr),
Size_t xstramemsz,
Dvoid **usrmempp
)
CONST dvoid *ctxp,
CONST dvoid *(*malicfp)(dvoid *ctxp,size_t size),
CONST dvoid *(ralocfp)(dvoid *ctxp,dvoid *memptr,size_t newsize),
CONST void *(*mfreefp)(dvoid *ctxp,dvoid *memptr),
Size_t xstramemsz,
Dvoid **usrmempp
)
2.申请/释放句柄
sword OCIHandleAlloc(
CONST dvoid *parenth, //新申请句柄的父句柄,一般为OCI环境句柄
Dvoid **hndlpp, //申请的新句柄
Ub4 type, type, //句柄类型
Size_t xtramem_sz, //申请的内存数
Dvoid **usrmempp //申请到的内存块指针
)
sword OCIHandleAlloc(
CONST dvoid *parenth, //新申请句柄的父句柄,一般为OCI环境句柄
Dvoid **hndlpp, //申请的新句柄
Ub4 type, type, //句柄类型
Size_t xtramem_sz, //申请的内存数
Dvoid **usrmempp //申请到的内存块指针
)
3.读取/设置句柄属性
sword OCIAttrSet(
dvoid *trgthndlp, //需设置的句柄名
ub4 trghndltyp, //句柄类型
dvoid *attributep, //设置的属性名
ub4 size, //属性值长度
ub4 attrtype, //属性类型
OCIError *errhp //错误句柄
)
sword OCIAttrSet(
dvoid *trgthndlp, //需设置的句柄名
ub4 trghndltyp, //句柄类型
dvoid *attributep, //设置的属性名
ub4 size, //属性值长度
ub4 attrtype, //属性类型
OCIError *errhp //错误句柄
)
4.连接/断开服务器
多用户方式连接:
sword OCIServerAttach(
memset结构体初始化OCIServer *srvhp,//未初始化的服务器句柄
OCIError *errhp,
多用户方式连接:
sword OCIServerAttach(
memset结构体初始化OCIServer *srvhp,//未初始化的服务器句柄
OCIError *errhp,
CONST text *dblink,//服务器SID
sb4 dblink_len,
ub4 mode //=OCI_DEFAULT,系统环境将设为阻塞方式
);
sb4 dblink_len,
ub4 mode //=OCI_DEFAULT,系统环境将设为阻塞方式
);
sword OCIServerDetach (
OCIServer *srvhp,
OCIError *errhp,
ub4 mode //OCI_DEFAULT
);
单用户方式连接:
sword OCILogon (
OCIEnv *envhp,
OCIError *errhp,
OCISvcCtx **svchp,
CONST text *username,
OCIServer *srvhp,
OCIError *errhp,
ub4 mode //OCI_DEFAULT
);
单用户方式连接:
sword OCILogon (
OCIEnv *envhp,
OCIError *errhp,
OCISvcCtx **svchp,
CONST text *username,
ub4 uname_len,
CONST text *password,
ub4 passwd_len,
CONST text *dbname,
ub4 dbname_len
);
CONST text *password,
ub4 passwd_len,
CONST text *dbname,
ub4 dbname_len
);
sword OCILogoff (
OCISvcCtx *svchp
OCIError *errhp
);
OCISvcCtx *svchp
OCIError *errhp
);
5.开始/结束一个会话
先认证用户再建立一个会话连接
sword OCISessionBegin (
OCISvcCtx *svchp, //服务环境句柄
先认证用户再建立一个会话连接
sword OCISessionBegin (
OCISvcCtx *svchp, //服务环境句柄
OCIError *errhp,
OCISession *usrhp, //用户会话句柄
ub4 credt, //认证类型
ub4 mode //操作模式
);
OCISession *usrhp, //用户会话句柄
ub4 credt, //认证类型
ub4 mode //操作模式
);
6.读取错误信息
sword OCIErrorGet (
dvoid *hndlp, //错误句柄
ub4 recordno, /从那里读取错误记录,从1开始
text *sqlstate, //已取消,=NULL
sb4 *errcodep, //错误号
text *bufp, //错误内容
ub4 bufsiz, //bufp长度
ub4 type //传递的错误句柄类型
=OCI_HTYPE_ERROR:错误句柄
sword OCIErrorGet (
dvoid *hndlp, //错误句柄
ub4 recordno, /从那里读取错误记录,从1开始
text *sqlstate, //已取消,=NULL
sb4 *errcodep, //错误号
text *bufp, //错误内容
ub4 bufsiz, //bufp长度
ub4 type //传递的错误句柄类型
=OCI_HTYPE_ERROR:错误句柄
=OCI_HTYPE_ENV:环境句柄
);
);
7.准备SQL语句
sword OCIStmtPrepare (
OCIStmt *stmtp, //语句句柄
OCIError *errhp,
CONST text *stmt, //SQL语句
ub4 stmt_len, //语句长度
ub4 language, //语句的语法格式=OCI_NTV_SYNTAX
ub4 mode //=OCI_DEFAULT
);
sword OCIStmtPrepare (
OCIStmt *stmtp, //语句句柄
OCIError *errhp,
CONST text *stmt, //SQL语句
ub4 stmt_len, //语句长度
ub4 language, //语句的语法格式=OCI_NTV_SYNTAX
ub4 mode //=OCI_DEFAULT
);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论