我可以通过OCI函数获取SID(“Oracle会话Id”)吗?
有一个简单地使用OCI函数执行查询的示例我可以通过OCI函数获取SID(“Oracle会话Id”)吗?,c,oracle,oracle-call-interface,C,Oracle,Oracle Call Interface,有一个简单地使用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,
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
我想我可以通过“社交目标”得到它。。
试图找到手册,但失败了
有办法吗?您可以通过查询获得:
select sys_context('USERENV', 'SID') from dual;
这在以下查询中通常很有用:
select unique client_driver from v$session_connect_info where sid = sys_context('USERENV', 'SID');
谢谢你。。。有没有办法不经查询就得到它?