#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   signed   long                           SLONG; 
  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的性能十分出
  代码大量缩减
  对内置函数直接访问
  对LONG类型的分段操作(可以处理LONG相关的任何错误)
  Pro*C不能为绑定变量动态分配内存
  不能控制Pro*C自动生成的代码
OCI开发流程:
  连接多个数据库:使用OCILogon (olog, olon or orlon)
  打开游标:oexec, oexn, ofen 或者 oftech
  执行相应SQL语句
  关于游标:oclose
  断开连接:ologoff
二、各个函数介绍:
1.创建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
)
2.申请/释放句柄
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      //错误句柄
)
4.连接/断开服务器
  多用户方式连接:
sword  OCIServerAttach(
memset结构体初始化OCIServer    *srvhp,//未初始化的服务器句柄
OCIError      *errhp,
CONST text    *dblink,//服务器SID
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,
ub4            uname_len,
CONST text      *password,
ub4            passwd_len,
CONST text      *dbname,
ub4            dbname_len 
);
sword OCILogoff ( 
OCISvcCtx      *svchp
OCIError      *errhp 
);
5.开始/结束一个会话
先认证用户再建立一个会话连接
sword OCISessionBegin ( 
OCISvcCtx    *svchp,    //服务环境句柄
OCIError      *errhp,
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:错误句柄
=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
);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。