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