【问题标题】:OCI getting fetched data without knowing the table structureOCI 在不知道表结构的情况下获取数据
【发布时间】:2016-04-16 11:37:13
【问题描述】:

我是第一次使用 OCI,所以这可能是一个基本问题....我来自 MySql word.... 使用 VS2012 和 C++。

我希望在 WHERE 和 LIMIT 子句上做一个简单的 SELECT 语句。 SQL 查询是从 C++ 编写的处理器动态构建的,并且该语句已从该模块准备就绪。所以我可能有类似的东西:

SELECT * FROM MYTABLE3;

SELECT F1, F2, F3 FROM MYTABLE1; 甚至

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

这里没什么大不了的。

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

   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 中看到的情况,我需要在发出执行/获取操作之前绑定将要返回的变量。就我而言,我不能这样做,因为我事先不知道表结构......

我很确定 Oracle 可以做到这一点,我只是不知道该怎么做。我已经阅读了 Oracle Docs 并没有找到对它的引用....

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

【问题讨论】:

    标签: c++ c oracle oracle-call-interface


    【解决方案1】:

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

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

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

    Retrieving data type information for columns in an Oracle OCCI ResultSet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2015-08-14
      相关资源
      最近更新 更多