服务上下文句柄

ACI_ATTR_ENV

  • 模式:

  • 描述:

返回与服务上下文关联的环境上下文。

  • 属性数据类型:

ACIEnv **

ACI_ATTR_SERVER

  • 模式:

读/写

  • 描述:

读取时,返回指向服务上下文的服务器上下文属性的指针。

更改后,设置服务上下文的服务器上下文属性。

  • 属性数据类型:

ACIServer ** / ACIServer *

ACI_ATTR_TRANS

  • 模式:

读/写

  • 描述:

读取时,返回指向服务上下文的事务上下文属性的指针。

更改后,设置服务上下文的事务上下文属性。

  • 属性数据类型:

ACITrans ** / ACITrans *

ACI_ATTR_SESSION

  • 模式:

读/写

  • 描述:

读取时,返回指向服务上下文的身份验证上下文属性的指针。

更改后,设置服务上下文的身份验证上下文属性。

  • 属性数据类型:

ACISession ** / ACISession *

ACI_ATTR_CALL_TIMEOUT

  • 模式:

读/写

  • 描述:

数据库在服务上下文句柄与数据库往返调用过程中的超时时间,单位是毫秒。当调用超时时,网络超时会返回一个错误。这个属性可以动态设置,如果设置为0,则没有超时时间。

这个属性只影响客户端的数据收发超时时间,与数据库端无关。

  • 属性数据类型:

ub4*/ub4

  • 举例:
static void func1( )
{
sword status = 0;
  ACIStmt *stmthp = (ACIStmt *)0;
  OraText *sqlStmt = (OraText *)"SELECT EMPNO FROM SCOTT.EMP";
  ub4 set_timeout= 200; /* in milliseconds */
  ub4 get_timeout = 0;

  Checkerr (errhp, \
      ACIStmtPrepare2 ((ACISvcCtx *)svchp, (ACIStmt **)&stmthp, \
      (ACIError *)errhp, (OraText *)sqlStmt, (ub4)strlen((char *)sqlStmt), \
      (OraText *)NULL, (ub4) 0, (ub4)ACI_NTV_SYNTAX, (ub4)ACI_DEFAULT), \
      (OraText *)"ACIStmtPrepare2");

  /* 设置超时时间*/
    Checkerr (errhp,
    ACIAttrSet(svchp, (ub4) ACI_HTYPE_SVCCTX,
     (dvoid *) &set_timeout, (ub4) 0,
     (ub4) ACI_ATTR_CALL_TIMEOUT, errhp),
     "ACIAttrSet ACI_ATTR_CALL_TIMEOUT");

    if ((status = ACIStmtExecute ((ACISvcCtx *)svchp, \
      (ACIStmt *)stmthp, (ACIError *)errhp, (ub4)1, (ub4)0, \
      (ACISnapshot *)0, (ACISnapshot *)0, (ub4)ACI_DEFAULT)) \
      != ACI_SUCCESS)
    {
      printf ( "ACIStmtExecute Failed with timeout: %dms\n", set_timeout);
      Checkerr (errhp, status,(OraText *)"ACIStmtExecute");
    }

  /* 获得超时属性值*/
    Checkerr (errhp,
    ACIAttrGet(svchp, (ub4) ACI_HTYPE_SVCCTX,
     (dvoid *) &get_timeout, (ub4) 0,
     (ub4) ACI_ATTR_CALL_TIMEOUT, errhp),
     "ACIAttrGet ACI_ATTR_CALL_TIMEOUT");

  Checkerr (errhp, \
      ACIStmtRelease ((ACIStmt *)stmthp, (ACIError *)errhp,(dvoid *)NULL, \
      0, ACI_DEFAULT), (oratext *)"StmtRelease");
}

ACI_ATTR_SESSGET_FLAGS

  • 模式:

  • 描述:

返回 ACISessionGet 返回的session的类型,有以下类型返回:

ACI_SESSGET_FLAGS_NEW: 返回的连接不是从连接池中拿的,而是重新生成的一个新连接,这种情况一般是连接池中无可用连接的情况下。

ACI_SESSGET_FLAGS_POOLED_SERVER: 返回的连接是从连接池中拿的,说明连接池中还有空闲连接。

ACI_SESSGET_FLAGS_RAC_DATA_AFFN和ACI_SESSGET_FLAGS_SHARD两种模式暂不支持。

该属性暂不支持。

  • 属性数据类型:

ub4

  • 举例:
ub4 sessgetFlags = 0;
if (!(lstat = ACISessionGet(envhp, errhp2, &svchp, authp,(OraText  *)poolName[0],
        (ub4)poolNameLen[0], NULL, 0,  NULL, NULL, NULL,
         ACI_SESSGET_SPOOL)))
{
  checkerr(errhp2, ACIAttrGet(svchp, ACI_HTYPE_SVCCTX,
    dvoid  *) &sessgetFlags, NULL, ACI_ATTR_SESSGET_FLAGS, errhp2));
  if  (sessgetFlags & ACI_SESSGET_FLAGS_NEW)
  {
    printf("Yes,  it's new connection\n");
  }
}