给我一个使用oracle的oci接口完整用例
时间: 2023-03-06 13:22:04 浏览: 73
以下是一个使用 Oracle OCI(Oracle Call Interface)接口连接数据库、创建表和插入数据的简单示例代码。请注意,这个示例只是一个基本的样本,您可能需要根据您的具体情况进行修改。
```c
#include <stdio.h>
#include <stdlib.h>
#include <oci.h>
int main() {
OCIEnv *envhp;
OCIError *errhp;
OCIServer *srvhp;
OCISession *usrhp;
OCISvcCtx *svchp;
OCIDefine *defhp;
OCIStmt *stmthp;
sword status;
text sqlstmt[1024];
int empno;
text ename[20];
int sal;
// 初始化 OCI 环境
status = OCIEnvCreate(&envhp, OCI_THREADED | OCI_OBJECT, NULL, NULL, NULL, NULL, 0, NULL);
if (status != OCI_SUCCESS) {
printf("OCIEnvCreate failed\n");
return 1;
}
// 分配错误句柄
status = OCIHandleAlloc(envhp, (void **)&errhp, OCI_HTYPE_ERROR, 0, NULL);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc failed for error handle\n");
return 1;
}
// 分配服务器句柄
status = OCIHandleAlloc(envhp, (void **)&srvhp, OCI_HTYPE_SERVER, 0, NULL);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc failed for server handle\n");
return 1;
}
// 创建服务器上下文
status = OCIServerAttach(srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
if (status != OCI_SUCCESS) {
printf("OCIServerAttach failed\n");
return 1;
}
// 分配服务句柄
status = OCIHandleAlloc(envhp, (void **)&svchp, OCI_HTYPE_SVCCTX, 0, NULL);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc failed for service context handle\n");
return 1;
}
// 设置服务上下文服务器句柄
status = OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, srvhp, 0, OCI_ATTR_SERVER, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet failed for service context handle\n");
return 1;
}
// 分配用户句柄
status = OCIHandleAlloc(envhp, (void **)&usrhp, OCI_HTYPE_SESSION, 0, NULL);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc failed for user handle\n");
return 1;
}
// 设置用户句柄的用户名和密码
status = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (void *)"scott", strlen("scott"), OCI_ATTR_USERNAME, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet failed for user handle\n");
return 1;
}
status = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (void *)"tiger", strlen("tiger"), OCI_ATTR_PASSWORD, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet failed for user handle\n");
return 1;
}
// 开始会话