语句句柄

ACI_ATTR_BIND_COUNT

  • 模式:

  • 描述:

返回语句句柄上的可绑定的位置个数。

  • 属性数据类型:

ub4 *

  • 举例:
ACIHandleAlloc(env,(void **) &pStatement, ACI_HTYPE_STMT, (size_t)0, (void **)0);
ACIStmtPrepare (pStatement, err, pszQuery, (ub4)strlen(pszQuery),
              (ub4)ACI_NTV_SYNTAX, (ub4)ACI_DEFAULT);
ACIAttrGet(pStatement, ACI_HTYPE_STMT, &iNbParameters, NULL, ACI_ATTR_BIND_COUNT,
         err);

ACI_ATTR_CURRENT_POSITION

  • 模式:

  • 描述:

指示结果集中的当前位置。此属性只能检索。无法设置。

  • 属性数据类型:

ub4 *

ACI_ATTR_ENV

  • 模式:

  • 描述:

指示结果集中的当前位置。此属性只能检索。无法设置。

  • 属性数据类型:

ub4 *

ACI_ATTR_FETCH_ROWID

  • 模式:

读/写

  • 描述:

指定ROWID在执行position 0 的定义和一条SELECT...FOR UPDATE语句后获取。

  • 属性数据类型:

boolean * /boolean

ACI_ATTR_NUM_DML_ERRORS

  • 模式:

  • 描述:

返回DML操作中的错误数。

  • 属性数据类型:

ub4 *

ACI_ATTR_PARAM_COUNT

  • 模式:

  • 描述:

获取与语句句柄关联的语句的选择列表中的列数。

  • 属性数据类型:

ub4 *

ACI_ATTR_PARSE_ERROR_OFFSET

  • 模式:

  • 描述:

返回语句的解析错误偏移量。

  • 属性数据类型:

ub2 *

ACI_ATTR_PREFETCH_MEMORY

  • 模式:

  • 描述:

设置要预取的顶层行的内存级别。如果内存级别占用的内存不超过指定的内存使用限制,则提取不超过指定顶级行计数的行。默认值为0,这意味着在计算要预取的行数时不包括内存大小。

  • 属性数据类型:

ub4 *

ACI_ATTR_PREFETCH_ROWS

  • 模式:

  • 描述:

设置要预取的顶层行数。默认值为1行。

  • 属性数据类型:

ub4 *

ACI_ATTR_ROW_COUNT

  • 模式:

  • 描述:

返回SELECT语句后到目前为止已处理的行数。

对于INSERT,UPDATE和DELETE语句,它是最新语句处理的行数。预设值是1。

对于不可滚动游标,ACI_ATTR_ROW_COUNT是 ACIStmtFetch2 自执行此语句句柄以来通过发出的调用提取到用户缓冲区的总行数。因为它们仅是向前顺序的,所以这也代表了应用程序看到的最高行号。

对于可滚动游标,ACI_ATTR_ROW_COUNT代表提取到用户缓冲区中的最大(绝对)行号。因为应用程序可以任意定位获取,所以自执行(scrollable)语句以来,这不必是获取到用户缓冲区中的行的总数。

  • 属性数据类型:

ub4 *

  • 举例:
int deptarray[]={10,20,30};
int iters = 3;
ub8 *rowcounts;
ub4 rowCountArraySize;
/*语句准备 */
text *updatesal = (text *)"UPDATE EMP set sal = sal+100 where deptno = :dept"
ACIStmtPrepare2 ((ACISvcCtx *)svchp,(ACIStmt **)&stmthp,
(ACIError *)errhp, (text *)updatesal, (ub4)sizeof(updatesal)-1,
(oratext *)NULL, (ub4) 0, (ub4)ACI_NTV_SYNTAX, (ub4)ACI_DEFAULT);
/*数组 绑定*/
ACIBindByPos (stmthp, &bndhp, errhp, 1, deptarray,  sizeof(deptarray[0]), SQLT_INT, (ub2 *) 0, (ub2 *) 0, (ub4)   0, (ub4)   0, (ub4 *) 0, (ub4)   ACI_DEFAULT);
ACIStmtExecute(svchp, stmthp, errhp, iters,  (ub4) 0, 0, 0, ACI_BATCH_ERRORS | ACI_RETURN_ROWCOUNT_ARRAY);
ACIAttrGet (stmthp, (ub4) ACI_HTYPE_STMT, (ub8 *)&rowcounts, &rowCountArraySize,ACI_ATTR_DML_ROW_COUNT_ARRAY, errhp);

ACI_ATTR_UB8_ROW_COUNT

  • 模式:

  • 描述:

返回SELECT语句后到目前为止已处理的行数。对于INSERT,UPDATE和DELETE语句,它是最新语句处理的行数。预设值是1。

对于不可滚动游标,ACI_ATTR_UB8_ROW_COUNT是自执行此语句句柄以来发出的 ACIStmtFetchACIStmtFetch2 调用,提取到用户缓冲区中的行总数。 对于这些不可滚动的游标,这也代表应用程序看到的最高行号。

如果使用属性ACI_ATTR_ROW_COUNT并且返回的行数大于UB4MAXVAL,则可能会返回以下一个或两个错误。该属性暂不支持。

  • 属性数据类型:

ub8 *

ACI_ATTR_ROWID

  • 模式:

  • 描述:

返回ROWID分配给的描述符 ACIDescriptorAlloc

  • 如果多行受到影响,则返回最后一个rowid。
  • 如果没有行受到影响,并且这是执行的第一条语句,则返回包含零的rowid。
  • 如果没有行受影响,但行受前一条语句执行的影响,则返回最后一条执行语句的最后一个rowid。

ACI中,该属性有两种使用场景,与Oracle的OCI有所不同:

  • 场景一:对于SELECT...FOR UPDATE语句,且设置语句句柄的ACI_ATTR_FETCH_ROWID属性后,会返回数据库中对应的ROWID列,这个功能与OCI是一致的;
  • 场景二:ACI用ACI_ATTR_ROWID属性还可以获得insert语句的last insert id值,主要是返回有AUTO_INCREMENT属性列的值。这种情况下,该属性返回值与ACILastInsertId基本一致;只是ACILastInsertId返回的是字符串;而本属性返回的是ACIRowid。
  • 属性数据类型:

ACIRowid *

ACI_ATTR_ROWS_FETCHED

  • 模式:

  • 描述:

指示在上一次提取中成功提取到用户缓冲区或以非零迭代执行的行数。它可用于可滚动和不可滚动语句句柄。

  • 属性数据类型:

ub4 *

ACI_ATTR_SQLFNCODE

  • 模式:

  • 描述:

返回与该语句关联的SQL命令的功能代码。该属性暂不支持。

  • 属性数据类型:

ub2 *

ACI_ATTR_STATEMENT

  • 模式:

  • 描述:

返回在语句句柄中准备的SQL语句的文本。在UTF-16模式下,返回的语句采用UTF-16编码。长度始终以字节为单位。

  • 属性数据类型:

oratext *

ACI_ATTR_STMT_STATE

  • 模式:

  • 描述:

返回该语句的获取状态。调用方可以使用此属性来确定会话是否可以在另一个服务上下文中使用,或者在当前数据访问调用集中是否仍需要该会话。基本上,如果您处于获取执行周期的中间,则您不想释放会话句柄以进行另一条语句执行。

  • 属性数据类型:

ub4 *

  • 取值范围:
  • ACI_STMT_STATE_INITIALIZED
  • ACI_STMT_STATE_EXECUTED
  • ACI_STMT_STATE_END_OF_FETCH

ACI_ATTR_STMT_TYPE

  • 模式:

  • 描述:

与句柄关联的语句类型。

  • 属性数据类型:

ub2 *

  • 取值范围:
  • ACI_STMT_SELECT
  • ACI_STMT_UPDATE
  • ACI_STMT_DELETE
  • ACI_STMT_INSERT
  • ACI_STMT_CREATE
  • ACI_STMT_DROP
  • ACI_STMT_ALTER
  • ACI_STMT_BEGIN (PL / SQL语句)
  • ACI_STMT_DECLARE (PL / SQL语句)
  • ACI_STMT_MERGE(PL / SQL语句)

ACI_ATTR_STMT_IS_RETURNING

  • 模式:

  • 描述:

返回执行的SQL语句中是否有retuning into 字句。

  • 属性数据类型:

ub1