有一个示例仅使用OCI函数来执行查询。
skip..
text *sql = (text *)"SELECT empno, ename FROM emp";
int id;
text pad[4000];
strcpy(username, "scott");
strcpy(password, "tiger");
strcpy(dbname, "orcl");
OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0);
OCIHandleAlloc(env, (dvoid *)&err, OCI_HTYPE_ERROR, 0, 0);
if (r = OCILogon2(env, err, &svc, username, strlen(username), password, strlen(password), dbname, strlen(dbname), OCI_DEFAULT) != OCI_SUCCESS)
{
checkerr(err, "OCILogon2", r);
}
if (r = OCIStmtPrepare2(svc, (OCIStmt **)&stm, err, sql, strlen(sql), NULL, 0, OCI_NTV_SYNTAX, OCI_DEFAULT) != OCI_SUCCESS)
{
checkerr(err, "OCIStmtPrepare2", r);
goto clean_up;
}
...skip
if (r = OCIDefineByPos(stm, &def, err, 1, &id, sizeof(id), SQLT_INT, 0, 0, 0, OCI_DEFAULT) != OCI_SUCCESS)
{
checkerr(err, "OCIDefineByPos", r);
goto clean_up;
}
if (r = OCIDefineByPos(stm, &def, err, 2, pad, sizeof(pad), SQLT_STR, 0, 0, 0, OCI_DEFAULT) != OCI_SUCCESS)
{
checkerr(err, "OCIDefineByPos", r);
goto clean_up;
}
if (r = OCIStmtExecute(svc, stm, err, 0, 0, 0, 0, OCI_DEFAULT) != OCI_SUCCESS)
{
checkerr(err, "OCIStmtExecute", r);
goto clean_up;
}
...skip
我想获取执行上述查询的会话的SID。
我认为我可以通过“ OCIAttrGet”获得它。 试图找到手册,但失败了...
有办法吗?
答案 0 :(得分:0)
您可以通过查询获取它:
select unique sid from v$session_connect_info where sid = sys_context('USERENV', 'SID');