c 执行oracle存储过程

对于C程序员来说,执行Oracle存储过程是常见需求之一,今天我们就来详细介绍如何通过C程序执行Oracle存储过程。

首先,我们需要连接到Oracle数据库。可以使用OCI库提供的函数进行连接,例如:

OCIEnv *envhp; OCIError *errhp; OCISvcCtx *svchp; OCIStmt *stmthp; OCIServer *srvhp; OCIAuthInfo *auth; OCIType *type; OCIDefine *defnp; OCIBind *bindp; OCIErrorGet(&envhp, 0, (const OraText **)0, &errhp); OCIHandleAlloc(envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, (dvoid **)0); OCIHandleAlloc(envhp, (dvoid **)&auth, OCI_HTYPE_AUTHINFO, 0, (dvoid **)0); OCIAttrSet(auth, OCI_HTYPE_AUTHINFO, (dvoid *)"username", (ub4)strlen("username"), OCI_ATTR_USERNAME, errhp); OCIAttrSet(auth, OCI_HTYPE_AUTHINFO, (dvoid *)"password", (ub4)strlen("password"), OCI_ATTR_PASSWORD, errhp); OCIAttrSet(auth, OCI_HTYPE_AUTHINFO, (dvoid *)"dbname", (ub4)strlen("dbname"), OCI_ATTR_DATABASE_NAME, errhp); OCIHandleAlloc(envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, 0, (dvoid **)0); OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp, (ub4)0, OCI_ATTR_SERVER, errhp); OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, (dvoid *)auth, (ub4)0, OCI_ATTR_AUTHINFO, errhp); OCIHandleAlloc(envhp, (dvoid **)&stmthp, OCI_HTYPE_STMT, 0, (dvoid **)0); OCILogon(envhp, errhp, &svchp, (OraText *)"username", strlen("username"), (OraText *)"password", strlen("password"), (OraText *)"dbname", strlen("dbname"));