c oracle包
C语言一直以来都是一门比较基础的编程语言,广受程序员的喜爱。而Oracle是一种非常流行的数据库管理系统,其强大的功能和稳定的性能广受用户的好评。在这两种技术中,我们可以看到一个非常重要的概念,那就是C语言中的C Oracle包。
C Oracle包可以被看作是C语言跟Oracle数据库进行交互的一个桥梁。通过它,我们可以在C程序中使用SQL语句来操作Oracle数据库,实现数据的读取、插入、更新、删除等操作。下面我们以一些例子来讲解C Oracle包的用法。
#include #include #include void main() { OCIEnv *envhp; /* 环境句柄 */ OCIError *errhp; /* 错误句柄 */ OCISvcCtx *svchp; /* 服务句柄 */ OCISession *authp; /* 会话句柄 */ OCIStmt *stmthp; /* SQL语句句柄 */ OCIBind *bindhp; /* 绑定句柄 */ OCIType *type; /* 非标准类型 */ OCILobLocator *clob; /* Clob Locator */ OCIUChar cs_id[20]; /* 字符集ID */ null; /* 初始化环境 */ OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid *)0, 0, 0, 0, (size_t)0, (dvoid **)0); /* 分配错误句柄 */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0); /* 分配服务句柄 */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, (size_t)0, (dvoid **)0); /* 建立连接 */ OCIAttrSet((dvoid *)svchp, (ub4)OCI_HTYPE_SVCCTX, (dvoid *)"tnsnames", (ub4)8, OCI_ATTR_SERVICE_NAME, errhp); /* 分配会话句柄 */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&authp, (ub4)OCI_HTYPE_SESSION, (size_t)0, (dvoid **)0); /* 配置会话 */ OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION, (dvoid *)"uname", (ub4)5, OCI_ATTR_USERNAME, errhp); OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION, (dvoid *)"password", (ub4)5, OCI_ATTR_PASSWORD, errhp); OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION, (dvoid *)cs_id, (ub4)0, OCI_ATTR_CHARSET_ID, errhp); /* 启动会话 */ OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT); /* 分配语句句柄 */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&stmthp, (ub4)OCI_HTYPE_STMT, (size_t)0, (dvoid **)0); /* 准备SQL语句 */ OCIStmtPrepare(stmthp, errhp, (text *)"SELECT ename FROM emp WHERE empno = :empno", (ub4)strlen((char *)"SELECT ename FROM emp WHERE empno = :empno"), (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT); /* 绑定参数 */ OCIBindByName(stmthp, (OCIBind **)&bindhp, errhp, (text *)":empno", (sb4)strlen((char *)":empno"), (dvoid *)&empno, (sb4)sizeof(empno), SQLT_INT, (dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0, OCI_DEFAULT); /* 执行SQL语句 */ OCIStmtExecute(svchp, stmthp, errhp, (ub4)1, (ub4)0, (OCISnapshot *)0, (OCISnapshot *)0, OCI_DEFAULT); /* 获取结果 */ while (OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT) == OCI_SUCCESS) { printf("%s\n", ename); } /* 断开会话 */ OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT); /* 释放资源 */ OCIHandleFree((dvoid *)stmthp, OCI_HTYPE_STMT); OCIHandleFree((dvoid *)authp, OCI_HTYPE_SESSION); OCIHandleFree((dvoid *)svchp, OCI_HTYPE_SVCCTX); OCIHandleFree((dvoid *)errhp, OCI_HTYPE_ERROR); OCIHandleFree((dvoid *)envhp, OCI_HTYPE_ENV); }