2017-06-30 17 views
1

私は、select文または表名を入力として使用して区切り文字付きファイルに変換するocciライブラリを使用してC++プログラムを作成しようとしています。しかし、ドキュメントを見ると、クエリ結果のすべての列をファイルにエクスポートする方法が見つかりません。ほとんどすべての私が見つけた例は、私が何をしたいのか、次の行oracleテーブルをフラット・ファイルに動的にエクスポートする

string query = "SELECT col1 FROM table1"; 

stmt = con->createStatement(query); 
res = stmt->executeQuery(); 

while (res->next()) 
{ 
    outfile<<res->getInt(1)<<endl; 
} 

に沿ったことは次のとおりです。select *を行い、その後、各列のタイプを指定せずに一度にファイルへの完全な行をエクスポートしますが、私の避難所これを行う何かを見つけることができませんでした。

私は、行単位のエクスポートは大規模なセットでは効率的ではないことを知っていますが、これを最適化する前に作っていきたいと思います。

これを効率的に行う方法については、誰も知りませんか?

答えて

0

メタデータオブジェクトを少なくとも1回反復することなくこれを行う方法はないことがわかりました。クエリの実行ごとにこれを一度だけ行う必要があるため、属性タイプと列の位置をマップに書き込み、結果セットループ内でそのマップを使用してデータを読み取ることになりました。使用したコードは次のとおりです。

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); 
    } 
0

OCCIを使用している間は、このような "箱の中"のようなものは見つけられないと思います。

しかし、STLを使用すると、すべての反復の結果をストリングストリームにプッシュできます。また、rs-> next()がNULLの場合、ファイルにストリングストリームを追加できます。

関連する問題