Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Oracle数据库中复制特定结果集到C++中SQLite数据库的最佳方法_C++_Oracle_Sqlite - Fatal编程技术网

从Oracle数据库中复制特定结果集到C++中SQLite数据库的最佳方法

从Oracle数据库中复制特定结果集到C++中SQLite数据库的最佳方法,c++,oracle,sqlite,C++,Oracle,Sqlite,我需要将从Oracle数据库获得的结果集的行插入到SQLite数据库的新表中。目前,我从结果集中的每一行创建一个insert语句,并在SQLite数据库上执行它。但在我看来,必须有更直接的方法。还是这条路走

我需要将从Oracle数据库获得的结果集的行插入到SQLite数据库的新表中。目前,我从结果集中的每一行创建一个insert语句,并在SQLite数据库上执行它。但在我看来,必须有更直接的方法。还是这条路走 其次,一个好的解决方案将考虑到数据有多大。我们说的是1000行,还是几百万行?对于小数据,如果整个转换完全发生在内存中,那么解决方案就足够了。对于较大的数据,您可能需要在磁盘上写入中间数据

第三,数据完整性如何?在将源数据库传输到目标数据库时,是否可能更改了源数据库?如果没有,那么一切都会变得更容易

尽管如此,这里有一种可能有效的方法:使用插入到。。。如果插入到现有表或创建表中,请选择语法。。。如果要创建新表,请选择AS。请参阅SQLite文档以了解:

INSERT语句的第二种形式包含SELECT语句 而不是VALUES子句。将在表中插入一个新条目,用于 通过执行SELECT语句返回的每一行数据

。。。或:

创建表格。。。AS SELECT语句创建并填充 基于SELECT语句结果的数据库表

在这两种情况下,技巧都是创建一个SELECT语句,该语句返回实际来自源数据库的固定值

这意味着在C++客户端应用程序中,首先在源数据库中创建SELECT语句,然后使用它创建插入或创建表查询字符串,它看起来如下:

INSERT INTO my_table SELECT 1, "abc", 2 UNION SELECT 123, "def", 456 UNION SELECT 1000, "foo", 2000
。。。其中所有的值如1、ABC、2, 123、DEF等来自源数据库,用于在C++应用程序中建立查询。 问题是,由于有许多联合体,这种方法不能很好地扩展,这使得在代码方面更难使用预先准备好的语句。但至少这是一种单语句的方法


考虑到所有的事情,你可以考虑只保留当前的解决方案,但是使用一个单独的插件。这将确保插入所有行或不插入任何行

你是说总共插入一个还是每行插入一个?在您的案例中,前者应该是首选,因为它只需要一个事务。我的意思是每行插入一个。但这不是我的观点。我是SQL的一个不速之客。我想知道是否有一种方法可以避免插入语句。比如:这是我的结果集,请把它作为数据库中的表123,我想这就是重点!我会写一个可能对你有帮助的答案在我的情况下,数据不是很大,完整性也不是问题。如果我理解正确的话,关键的一点是在任何情况下都需要创建文本语句,没有语句就没有直接的方法,对吗?我曾设想过这样一种情况,人们可以在源数据库SQLite上执行一条语句,获取一些指向实际数据的指针,然后以某种方式将该指针传递到目标数据库Oracle,然后在那里进行集成。如果存在这样一种直接方式,那么我肯定没有意识到。不同的数据库管理系统可能使用截然不同的实现技术。事实上,即使是同一个系统,在不同的情况下也可能使用不同的存储机制。通常,即使是SQL,即他们理解的接口,也不是100%兼容的,更不用说后端了!数据库不仅仅由表组成,还包括视图、触发器和其他高级机制。然而不管怎样,使用文本语句有什么不好的地方?它比使用一些转换器库更难吗?您肯定是对的,它并不难。将数据转换为文本并返回数据似乎是不必要的开销。你知道一些数据库抽象API,比如ODBC,是否有一种直接的机制,比如传递游标?我不知道,但我绝对不是ODBC方面的专家。然而,依我看,这只是另一种开销。