因此,我经常需要将数据加载到保存表中以运行一些数据验证检查,然后返回结果。 通常,我创建保存表,然后创建一个sqlldr控制文件并将数据加载到表中,然后运行我的查询。 是否有任何理由我应该使用外部表格来代替? 他们会以什么方式让我的生活更轻松?
答案 0 :(得分:13)
外部表的最大优点是我们可以使用SQL从数据库内部查询它们。因此,我们可以将验证检查作为SELECT语句运行,而无需保持表。同样,如果我们需要对加载的数据进行一些操作,那么使用SQL而不是SQLLDR命令来执行此操作几乎总是更容易。我们还可以使用DBMS_JOB / DBMS_SCHEDULER例程管理数据加载,这进一步减少了对shell脚本和cron作业的需求。
但是,如果你已经有一个使用SQLLDR的成熟稳定的进程,那么我承认你不太可能意识到从移植到外部表的巨大好处。
还有一些情况 - 尤其是如果要加载数百万行 - 其中SQLLDR方法可能要快得多。但是,差异不会与更新版本的数据库一致。我完全希望SQLLDR最终会被弃用,而不是外部表。
答案 1 :(得分:3)
如果查看外部表语法,它看起来很像SQL * Loader控制文件语法: - )
如果要在多个查询中重复使用外部表,则加载表可能会更快(正如您现在所做的那样),而不是为每个查询重新扫描外部表。正如@APC所说,Oracle正在对它们进行改进,因此取决于您的数据库版本YMMV。
答案 2 :(得分:3)
我会使用外部表来提高灵活性。
将它们上的数据源修改为不同的文件alter table ... location ('my_file.txt1','myfile.txt2')
您可以执行多表插入,合并,通过流水线功能等运行...
并行查询更容易......
它还可以更好地建立依赖关系......
代码存储在数据库中,因此会自动备份......
答案 3 :(得分:0)
您可以使用外部表执行的另一项操作是读取压缩文件。例如,如果您的文件是gzip压缩的,那么您可以在外部表定义中使用PREPROCESSOR指令,在读取文件时对其进行解压缩。