我正在使用 Oracle C++ 调用接口 (OCCI) 为 Oracle 编写通用数据库处理层。它必须接受由应用程序的其他部分提供的 SQL 字符串(没有说明它是什么类型的语句),然后应该检查应用程序的调用部分是否允许该语句类型,如果是,代表执行它来电者的。
但是,我找不到一种有效的方法来从基于提供的 SQL 字符串创建的 OCCI 语句中获取 SQL 语句类型(选择、更新、删除等)。
在 OCI 中,可以通过调用OCIAttrGet()
OCI 语句句柄并传递OCI_ATTR_STMT_TYPE
给attrtype
参数来获取此信息,但我在 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 字符串,既不高效也不安全)?