Ich必须将大量数据从应用程序中移植到ORACLE 11g数据库中。要从C ++中执行SQL,我使用以下方案,使用裸SQL和Poco :: Data框架以及与我的数据库的ODBC连接:
// get session from ODBC session pool
Session session = moc::SessionPoolMOC::get();
// prepare a statement as QString
QString q = ("INSERT INTO MOC_DATA_CONCENTRATOR"
"("
"EQUIPMENT_INSTANCE_ID, "
"STATION_NAME, "
"DATA_SRC, "
"ORG_ID)"
"values (%1, '%2', '%3', %4);"
);
/*
there would be also prepared statements, but I think that is not the
topic now...
*/
// set parameters within string from passed object 'info'
q = q.arg(info.equipment_instance_id); /* 1 */
q = q.arg(info.station_name.toUtf8().constData()); /* 2 */
q = q.arg(info.data_src.toUtf8().constData()); /* 3 */
q = q.arg(info.org_id); /* 4 */
// prepare statement
Statement query(session);
query << q.toUtf8().constData();
try
{
// execute query
query.execute();
}
catch (...)
{
...
}
我知道,这是一个非常低级别的方法,但它对我到目前为止遇到的所有情况都非常好......
问题是,我现在有很多数据(大约400,000条记录)要填入一个表格。数据以不同的C ++对象的形式提供,存储在Qt-List中。我天真的方法是为每个要插入的对象调用此代码序列。这很好,但结果很慢(约需15分钟左右)。我四处询问,被告知要更好地使用所谓的“批量插入”。
然而,似乎这与PLSQL更相关 - 至少我不知道如何从相同的上下文或以与我的示例中所示类似的方式使用它。我既不是ORACLE专家也不是管理员,数据库的使用只是我项目中的一个副作用。你会推荐什么?
非常感谢, 迈克尔