1

我正在使用 Oracle C++ 调用接口 (OCCI) 为 Oracle 编写通用数据库处理层。它必须接受由应用程序的其他部分提供的 SQL 字符串(没有说明它是什么类型的语句),然后应该检查应用程序的调用部分是否允许该语句类型,如果是,代表执行它来电者的。

但是,我找不到一种有效的方法来从基于提供的 SQL 字符串创建的 OCCI 语句中获取 SQL 语句类型(选择、更新、删除等)。

在 OCI 中,可以通过调用OCIAttrGet()OCI 语句句柄并传递OCI_ATTR_STMT_TYPEattrtype参数来获取此信息,但我在 OCCI 中找不到任何等效函数。

可以通过调用从 OCCI 语句中获取 OCI 语句句柄getOCIStatement(),但到目前为止,从该 OCI 语句句柄中获取语句类型属性的尝试失败了:

  OCIStmt *ociStmt = sqlstmt->getOCIStatement();
  ub2 statementType = OCI_STMT_UNKNOWN;
  OCIError *errhp = 0;

  sword result = OCIAttrGet(ociStmt, OCI_HTYPE_STMT, &statementType, 0, OCI_ATTR_STMT_TYPE, errhp);

当我运行上述内容时,我得到result = -2并且没有任何变化statementType

无论如何,我认为这种方法相当落后,并且更愿意与 OCCI 一起干净地操作。

有谁知道如何确定准备好的 OCCI 语句的 SQL 语句类型(缺少解析原始 sql 字符串,既不高效也不安全)?

4

0 回答 0