【问题标题】:How to SELECT whole table with OTL, and save it to file?如何使用 OTL 选择整个表,并将其保存到文件中?
【发布时间】:2011-04-17 16:00:26
【问题描述】:

这就是问题所在,我不知道表中有多少属性或哪种类型的属性,我需要简单的选择语句,例如:SELECT * FROM TABLE1;写入文件。

这需要使用 otlv4 包装器来完成。

请帮忙。

otl_stream i(50, // buffer size             
     "select * from test_tab where f1>=:f<int> and f1<=:f*2",                 // SELECT statement           
     db // connect object      
     );     
int ac=0;
     char bc[64];
     memset(bc, 0, 64);

     while(!i.eof())
     {

        i >> ac >> bc;
        cout << "Boooo " << ac << "  " << bc << endl;
     }

这是我知道有多少属性以及有哪些类型的示例。但是如果我不知道呢?

【问题讨论】:

  • 运行 describe tablename 命令以获取表的描述。然后您可以相应地格式化输出以写入文件。
  • 我不知道如何将所有属性绑定到变量?我可以获得属性的变量类型,但我需要初始化该变量以将属性值放入变量中。明白问题??没有我可以稍后转换的通用返回类型。
  • @Gile - 你能运行任何数据库命令吗?如果你可以运行选择,描述也应该被支持?你得到我的建议了吗?首先获取表的描述,然后根据查询返回的数据类型,读取数据会更容易?
  • 我可以运行命令。这是示例代码: int ac=0;字符 bc[64]; memset(bc, 0, 64); while(!i.eof()) { i >> ac >> bc; cout
  • @Gile - 使用 "describe tablename" 代替 select 语句 -> 它将返回表结构(字段名,数据类型)。获得表结构后,您可以运行 select 语句并相应地解析数据,因为您现在有了表结构来知道预期的数据类型?

标签: c++ database oracle wrapper otl


【解决方案1】:

文件流以及 OTL 的 check_end_of_row()set_all_column_types() 函数应该可以满足您的要求。在循环 OTL 流的 eof 检查时,对于每一行,您可以在行尾检查时循环,并将每个属性的值从 OTL 流发送到文件流。每次行末检查后,将换行代码发送到文件流。将所有列类型设置为 str 应该允许您只使用一个变量来处理一行中的所有属性值。

OTL 文档中的This 示例演示了如何使用 set_all_column_types 函数。您必须先创建流,设置选项,然后打开流。如果您同时创建和打开流,它将不起作用。

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 2022-11-24
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多