C oracle api

C oracle api是为了简化与Oracle数据库的交互而设计的一组API接口。它可以帮助开发人员简化数据管理、查询和存储等重要工作。C oracle api还可以允许开发人员通过外部C程序来直接与Oracle数据库进行通信。

为了更好地了解C oracle api的使用,以下是一些使用C oracle api时常用的代码示例:

// 连接到Oracle数据库 OCIDefine handle; OCIStmt stmt; //... // 创建数据库连接指针 OCIEnvCreate(&env, OCI_DEFAULT, (dvoid *) 0, (dvoid * (*)(void *, size_t)) 0, (dvoid * (*)(void *, void *, size_t)) 0, (void (*)(void *, void *)) 0, 0, (dvoid **)0); OCIHandleAlloc((dvoid *)env, (dvoid **)&err, OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0); OCIHandleAlloc((dvoid *)env, (dvoid **)&srv, OCI_HTYPE_SERVER, (size_t)0, (dvoid **)0); OCIHandleAlloc((dvoid *)env, (dvoid **)&svc, OCI_HTYPE_SVCCTX, (size_t)0, (dvoid **)0); OCIHandleAlloc((dvoid *)env, (dvoid **)&authp, OCI_HTYPE_SESSION, (size_t)0, (dvoid **)0); OCIServerAttach(srv, err, (const OraText *)"//127.0.0.1:1521/orcl", strlen("//127.0.0.1:1521/orcl"), OCI_DEFAULT); OCIAttrSet((dvoid *)svc, OCI_HTYPE_SVCCTX, (dvoid *)srv, (ub4)0, OCI_ATTR_SERVER, err); OCIAttrSet((dvoid *)authp, OCI_HTYPE_SESSION, (dvoid *)"test", strlen("test"), OCI_ATTR_USERNAME, err); OCIAttrSet((dvoid *)authp, OCI_HTYPE_SESSION, (dvoid *)"123456", strlen("123456"), OCI_ATTR_PASSWORD, err); OCISessionBegin(svc, err, authp, OCI_CRED_RDBMS, OCI_DEFAULT); OCIAttrSet((dvoid *)svc, OCI_HTYPE_SVCCTX, (dvoid *)authp, (ub4)0, OCI_ATTR_SESSION, err); // 查询数据 char str_sql[256]="select test1, test2 from userinfo"; OCIResult* p_result; OCIStmt* p_stmt; OCIDefine* p_define=NULL; OCIBind p_bind2[2]; sb4 s_res=0; OCIHandleAlloc( (dvoid *)env, (dvoid **)&stmt, OCI_HTYPE_STMT, (size_t)0, (dvoid **)0 ); if(OCIStmtPrepare(stmt, err, (text*)str_sql, strlen(str_sql), OCI_NTV_SYNTAX, OCI_DEFAULT)!=OCI_SUCCESS) { printf("SQL Error: Statement couldn't be prepared\n"); } OCIParamGet(stmt, OCI_HTYPE_STMT, err, (void **)&p_result, 1); OCIAttrGet(p_result, OCI_DTYPE_PARAM, (void **)&p_define[0], (ub4*)0, OCI_ATTR_NAME, err); OCIAttrGet(p_result, OCI_DTYPE_PARAM, (void **)&p_define[1], (ub4*)0, OCI_ATTR_NAME, err); OCIDefineByPos(stmt, &p_define[0], err, 1, NULL, 0, SQLT_STR, NULL, NULL, NULL, OCI_DEFAULT); OCIDefineByPos(stmt, &p_define[1], err, 2, NULL, 0, SQLT_NUM, NULL, NULL, NULL, OCI_DEFAULT); if(OCIDefineByPos(stmt, &p_define[0], err, 1, NULL, 0, SQLT_STR, NULL, NULL, NULL, OCI_DEFAULT)!=OCI_SUCCESS) { OCIHandleFree(stmt, OCI_HTYPE_STMT); printf("SQL Error: Binding statements failed\n"); } if(OCIDefineByPos(stmt, &p_define[1], err, 2, NULL, 0, SQLT_NUM, NULL, NULL, NULL, OCI_DEFAULT)!=OCI_SUCCESS) { OCIHandleFree(stmt, OCI_HTYPE_STMT); printf("SQL Error: Binding statements failed\n"); } /* Execute the SQL statement */ if(OCIStmtExecute(svc, stmt, err, (ub4)1, (ub4)0, (CONST OCISnapshot*)NULL, (OCISnapshot*)NULL, OCI_COMMIT_ON_SUCCESS)!=OCI_SUCCESS) { OCIHandleFree(stmt, OCI_HTYPE_STMT); printf("SQL Error: Statement execution failed\n"); } /* Fetch the rows */ while((s_res = OCIStmtFetch(stmt, err, 1, OCI_FETCH_NEXT, OCI_DEFAULT))!=OCI_NO_DATA) { printf("Name: %s, Test result: %d\n", sql_names, sql_tests); } // 关闭数据库连接 OCILogoff(svc, err);