gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:02:13 26 4
gpt4 key购买 nike

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

我希望执行一个简单的 SELECT 语句,并对 WHERE 和 LIMIT 子句进行一些变体。 SQL 查询是从 C++ 编写的处理器动态构建的,并且语句从该模块准备就绪。所以我可能有这样的东西:

从 MYTABLE3 中选择 *;

从 MYTABLE1 中选择 F1、F2、F3; 甚至

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

没什么大不了的。

我的问题是我不提前知道表格式,因此在执行语句并获取表结构之前我无法将变量绑定(bind)到它。在 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 中看到的情况,我需要在发出执行/获取操作之前绑定(bind)将要返回的变量。就我而言,我无法做到这一点,因为我事先不知道表结构......

我很确定 Oracle 可以做到这一点,但我只是不知道如何做到。我已阅读 Oracle 文档,但没有找到对其的引用...

非常感谢帮助和代码示例。我已经被这个问题困扰了两天了...感谢您的帮助。

最佳答案

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

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

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

Retrieving data type information for columns in an Oracle OCCI ResultSet

关于c++ - OCI 在不知道表结构的情况下获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36663642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com