c oracle oci

#include #include int main() { OCIEnv *env; OCISvcCtx *svc; OCIError *err; OCIStmt *stmt; OCIParam *parm; OCIDefine *def; ub4 i, num_cols; sword rc; text *username = "user"; text *password = "passwd"; text *db = "db.example.com:1521/dbname"; rc = OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0); // 初始化环境 rc = OCIHandleAlloc(env, (dvoid **)&err, OCI_HTYPE_ERROR, 0, 0); // 创建错误句柄 rc = OCIHandleAlloc(env, (dvoid **)&svc, OCI_HTYPE_SVCCTX, 0, 0); // 创建服务句柄 rc = OCILogon2(env, err, &svc, username, strlen(username), password, strlen(password), db, strlen(db), OCI_LOGON_SYSDBA); // 登录到数据库 rc = OCIHandleAlloc(env, (dvoid **)&stmt, OCI_HTYPE_STMT, 0, 0); // 创建语句句柄 rc = OCIStmtPrepare(stmt, err, (text *)"SELECT * FROM example", strlen("SELECT * FROM example"), OCI_NTV_SYNTAX, OCI_DEFAULT); // 准备语句 rc = OCIStmtExecute(svc, stmt, err, 0, 0, 0, 0, OCI_DEFAULT); // 执行语句 rc = OCIStmtFetch(stmt, err, 1, OCI_FETCH_NEXT, OCI_DEFAULT); // 获取结果 while (rc != OCI_NO_DATA) { rc = OCIStmtGetPieceInfo(stmt, err, &parm, &num_cols, &i, OCI_HTYPE_DEFINE, OCI_DEFAULT); // 获取字段数 for (i = 1; i

除了查询,我们还可以使用oracle oci来执行其他的数据库操作,如插入、更新、删除等操作。以下是一个例子,它可以用来在名为“example”的表格中插入一行:

#include #include int main() { OCIEnv *env; OCISvcCtx *svc; OCIError *err; OCIStmt *stmt; ub4 i, num_cols; sword rc; text *username = "user"; text *password = "passwd"; text *db = "db.example.com:1521/dbname"; rc = OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0); // 初始化环境 rc = OCIHandleAlloc(env, (dvoid **)&err, OCI_HTYPE_ERROR, 0, 0); // 创建错误句柄 rc = OCIHandleAlloc(env, (dvoid **)&svc, OCI_HTYPE_SVCCTX, 0, 0); // 创建服务句柄 rc = OCILogon2(env, err, &svc, username, strlen(username), password, strlen(password), db, strlen(db), OCI_LOGON_SYSDBA); // 登录到数据库 rc = OCIHandleAlloc(env, (dvoid **)&stmt, OCI_HTYPE_STMT, 0, 0); // 创建语句句柄 rc = OCIStmtPrepare(stmt, err, (text *)"INSERT INTO example VALUES(:1, :2, :3)", strlen("INSERT INTO example VALUES(:1, :2, :3)"), OCI_NTV_SYNTAX, OCI_DEFAULT); // 准备语句 char name[20] = "John"; char age[3] = "21"; char gender[7] = "male"; OCIBind *bnd1, *bnd2, *bnd3; rc = OCIBindByPos(stmt, &bnd1, err, 1, (dvoid *)&name, sizeof(name), SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT); // 绑定参数1 rc = OCIBindByPos(stmt, &bnd2, err, 2, (dvoid *)&age, sizeof(age), SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT); // 绑定参数2 rc = OCIBindByPos(stmt, &bnd3, err, 3, (dvoid *)&gender, sizeof(gender), SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT); // 绑定参数3 rc = OCIStmtExecute(svc, stmt, err, 1, 0, 0, 0, OCI_DEFAULT); // 执行语句 rc = OCIHandleFree(stmt, OCI_HTYPE_STMT); // 释放语句句柄 rc = OCILogoff(svc, env, err); // 注销数据库 return 0; }