将 oracle table 动态导出到平面文件
Exporting an oracle table dynamically to a flat file
我正在尝试使用 occi 库构建一个 C++ 程序,该程序会将 select 语句或 table 名称作为输入并将其转换为带分隔符的文件。但是,查看文档,我找不到将查询结果的所有列导出到文件中的方法。我找到的几乎所有示例都遵循以下几行
string query = "SELECT col1 FROM table1";
stmt = con->createStatement(query);
res = stmt->executeQuery();
while (res->next())
{
outfile<<res->getInt(1)<<endl;
}
我想做的是:做一个select *
,然后在不指定每列类型的情况下一次性将整行导出到文件,但我一直没能找到这样的东西这样做。
我知道逐行导出对于大集合来说并不是很有效,但我想在优化之前完成这项工作。
有没有人知道如何有效地做到这一点?
我不认为您在使用 OCCI 时会发现这样的东西 "in the box"。
但是使用 STL,您可以将每次迭代的结果推送到字符串流,当 rs->next() 为 NULL 时,您可以将字符串流附加到文件中。
我发现如果不至少迭代一次元数据对象就无法做到这一点。因为我只需要在每次查询执行时执行一次,所以我最终将属性类型和列位置写入映射并在结果集循环中使用该映射来读取数据。这是我使用的代码:
res = stmt->executeQuery();
vector<oracle::occi::MetaData> meta = res->getColumnListMetaData();
map<int, int> mapper;
for (int i=0; i < meta.size(); i++) {
mapper[i] = meta[i].getInt(oracle::occi::MetaData::ATTR_DATA_TYPE);
}
我正在尝试使用 occi 库构建一个 C++ 程序,该程序会将 select 语句或 table 名称作为输入并将其转换为带分隔符的文件。但是,查看文档,我找不到将查询结果的所有列导出到文件中的方法。我找到的几乎所有示例都遵循以下几行
string query = "SELECT col1 FROM table1";
stmt = con->createStatement(query);
res = stmt->executeQuery();
while (res->next())
{
outfile<<res->getInt(1)<<endl;
}
我想做的是:做一个select *
,然后在不指定每列类型的情况下一次性将整行导出到文件,但我一直没能找到这样的东西这样做。
我知道逐行导出对于大集合来说并不是很有效,但我想在优化之前完成这项工作。
有没有人知道如何有效地做到这一点?
我不认为您在使用 OCCI 时会发现这样的东西 "in the box"。
但是使用 STL,您可以将每次迭代的结果推送到字符串流,当 rs->next() 为 NULL 时,您可以将字符串流附加到文件中。
我发现如果不至少迭代一次元数据对象就无法做到这一点。因为我只需要在每次查询执行时执行一次,所以我最终将属性类型和列位置写入映射并在结果集循环中使用该映射来读取数据。这是我使用的代码:
res = stmt->executeQuery();
vector<oracle::occi::MetaData> meta = res->getColumnListMetaData();
map<int, int> mapper;
for (int i=0; i < meta.size(); i++) {
mapper[i] = meta[i].getInt(oracle::occi::MetaData::ATTR_DATA_TYPE);
}