OCI在不知道表结构的情况下获取获取的数据

OCI getting fetched data without knowing the table structure

本文关键字:获取 情况下 数据 结构 不知道 OCI      更新时间:2023-10-16

我是第一次与OCI合作,所以这可能是一个基本问题。。。。我来自MySql单词。。。。将VS2012与C++一起使用。

我想做一个简单的SELECT语句,对WHERE和LIMIT子句进行一些修改。SQL查询是从C++编写的处理器中动态构建的,该语句从此模块中准备好。所以我可能有这样的东西:

SELECT * FROM MYTABLE3;

SELECT F1, F2, F3 FROM MYTABLE1;甚至

SELECT F1, F3, F4 FROM MYTABLE2 WHERE ID > 10;

这里没什么大不了的。

我的问题是,我事先不知道表格格式,所以在执行语句和获取表格结构之前,我无法将变量绑定到它。在MySql中,这很容易,因为我执行语句并获得resultSet。从resultSet中,我可以检查检索到的列数、每列的名称、数据格式和大小。在阅读了这些数据之后,我构建了一个具有表结构及其数据的动态矩阵,这是我的最终目标。例如:

   sql::ResultSetMetaData *resultMeta = resultSet->getMetaData();
    while (resultSet->next())
    {
         for (unsigned int i = 1; i <= resultMeta->getColumnCount(); i++) 
         {
             std::string label = resultMeta->getColumnLabel(i);
             std::string type = resultMeta->getColumnTypeName(i);
             // ... Get the resultset attributes and data
         }
         retData.push_back(data); 
     }

从我在Oracle中看到的情况来看,在发出execute/fetch操作之前,我需要绑定将要返回的变量。就我而言,我不能这样做,因为我事先不知道表格结构。。。

我很确定Oracle可以做到这一点,我只是不知道如何做到。我已经阅读了Oracle文档,没有找到它的参考资料…

我们非常感谢您的帮助和代码示例。我已经坚持了两天了。。。谢谢你的帮助。

请在您的语句句柄(stmhp)上尝试以下操作。这将为您的oracle语句提供列计数。

err=OCIAttrGet((dvoid*)stmhp,(ub4)OCI_TYPE_STMT,(dvoid*)&parmcnt,(ub4*)0,(ub4)OCI_ATTR_PARAM_COUNT,errhp);

请查看此链接,它将帮助您找出结果集中每一列的数据类型。

检索Oracle OCCI ResultSet 中列的数据类型信息

相关文章: