在ORACLE的外部C过程中,我用OCIExtProcGetEnv() 可以正常获取到env、svc、err的句柄。但是在使用OCIAttrGet()获取句柄中的某一些属性的时候(比如server句柄属性中的DBNAME的值),接口不报错但是获取的字符串是空的。而其他一些标志位类型的属性获取却是正常的。
/* Test Server handle able */
ub4 serverStatus = 0;
OCIAttrGet(srvhp, OCI_HTYPE_SERVER, &serverStatus, 0, OCI_ATTR_SERVER_STATUS, errhp);
if (serverStatus == OCI_SERVER_NORMAL)
errLogPrint("Connection is up", (int)serverStatus);
else if (serverStatus == OCI_SERVER_NOT_CONNECTED)
errLogPrint("Connection is down", (int)serverStatus);
这里从Server句柄中获取到服务器的状态正常,说明Server句柄是有效的句柄
/* Get SERVERNAME from Server handle */
ub4 serverNameLen = 64;
oratext serverName[64] = {0};
errNum = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, &serverName, &serverNameLen, OCI_ATTR_DBNAME, errhp);
if (errNum != OCI_SUCCESS)
{
errLogPrint("OCIAttrGet(srvhp, OCI_HTYPE_SERVER, &serverName, &serverNameLen, OCI_ATTR_SERVICENAME, errhp)", 400);
}
errLogPrint(serverName, serverNameLen);
但是获取数据库的DBNAME,打印的日志显示 serverName为空,serverNameLen = 0;
无论是对句柄分配内存还是对接收的字符串分配内存,获取的结果都是空且长度参数被写0.
并且复制Oracle官网给出的demo也无法获取到字符串。求解!!
编译有错吗?