我的 excel表中有 100万个记录,我想以最快的方式将这些记录复制到 oracle 数据库。
我知道有两种方法使用批量,其他方式使用 SQLBulkcopy 。
除了这两种方法之外,还有最快的方法吗?
此外,我还需要创建一个log file
,其中包含在执行操作时未插入的记录的详细信息。
答案 0 :(得分:2)
最快的方法是将Excel文件类型设置为CSV,将所有列与表格标题相匹配,然后手动将CSV导入表格。
答案 1 :(得分:1)
在远程服务器上加载逗号分隔文件的最快方法是通过sql * ldr使用直接路径加载..如果在同一台服务器上也可以使用外部表..
我建议您使用2个步骤加载.. 首先按照blog创建一个sql * ldr加载脚本。 然后在oracle客户端中运行生成的脚本.. 如果表有nologging,那么在执行脚本之前添加append命令会使它更快..
话虽如此,一百万行对于oracle来说太小了,如果表没有严重索引,应该可以在一分钟内加载..
你可以通过并行加载来加载更快,但这只是一百万行的过度杀戮。
答案 2 :(得分:-1)
您可以使用任何Excel解析库,例如apache-poi 它使您能够阅读excel电子表格。
只需存储每一行&列,以及您需要的任何其他数据。 然后,将所有数据传输到您希望在其上查看的服务器/位置。
使用此库的我的某个程序的示例源代码:
public boolean read() {
for (final int sheet : sheets()) {
final Sheet result = workbook.getSheetAt(sheet);
if (result != null) {
results.addAll(results(result));
}
}
if (results().size() > 0) {
System.out.println("Creating backup database incase any failures occur...");
createBackup();
return true;
}
return false;
}
public boolean open() {
try {
results = new HashSet<E>();
workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(new File(location()))));
} catch (IOException e) {
System.out.println("IOException getting workbook from speadsheet: " + e.getMessage());
}
return results != null && workbook != null;
}