OCI在不知道表结构的情况下获取获取的数据
OCI getting fetched data without knowing the table structure
我是第一次与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 中列的数据类型信息
- 如何在没有实例的情况下获取非静态方法的类型?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 如何在没有硬编码的情况下以C++为单位获取类数组的长度?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 在不使用模板的情况下获取 std::array 引用
- 在确定有实现的情况下获取HTTP 501未实现
- 如何在给定时钟偏移的情况下正确获取时间
- 如何从 std::optional 中获取 QByteArray<QByteArray>,并在没有其他 malloc 的情况下保留 std::nullopt?
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何将左值传递给函数,仅在没有模板的情况下获取右值
- 如何在不创建实例的情况下获取类的方法成员的类型?
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- 如何在不包含 Windows.h 的情况下获取 IsDebuggerPresent 的声明
- 如何在没有.app的情况下,在 macOS 上使用 qmake 获取二进制文件
- <int> 在不破坏堆栈的情况下获取 C++ 中的堆栈总和
- 在不使用API的情况下,如何在Windows中获取过程信息
- 如何在不引起实例化的情况下获取功能模板的签名
- 如何在不定义其他 fonction getValue() 的情况下获取私有值
- 如何在不获取所有html的情况下获取QTextEdit的html标签?