外部表与UTL_FILE的好处

时间:2014-06-23 19:42:59

标签: oracle plsql

我正在PL / SQL中编写一个应用程序,它接受一个.csv平面文件,读取它,对它进行一些数据处理,然后决定更新,插入或删除几个表中的哪一个。

我可以选择使用UTL_FILE.GET_LINE功能一次处理单个记录,使用各种REGEX工具解析它,将数据临时存储在某些变量中,然后使用它(做出决策,更新表)等等。)

我也有选择,创建一个外部表,然后只是使用所述外部表上的游标(使用每个循环的性能)单步执行它我仍然可以做所有相同的事情数据(制定决策,更新表格等)

我环顾四周,有几个论坛建议外部表格是首选的解决方案,因为它们可以更好地扩展,更快,更可靠。但是,我没有听到过原因。关于utl_file和/或外部表的Oracles文档没有讨论为什么一个可能比另一个更快,所以我很好奇是否有人有更多的信息或参考,我不知道什么会使一个人比另一个更好。

2 个答案:

答案 0 :(得分:1)

性能差异非常简单:UTL_FILE是一个PL / SQL包,而外部表使用用C编写的SQL * Loader代码。

如果你有足够的数据,你甚至可以用最小的努力f.i来并行加载外部表。 ALTER TABLE my_external_table PARALLEL 4;

外部表可以在批量模式下使用(INSERT INTO my_table SELECT ... FROM my_external_table JOIN my_lookup_table USING(lookup_column))。

外部表可以设置为事务安全模式(REJECT LIMIT 0),因此上面的INSERT可以工作或回滚。

您需要更多理由吗?

答案 1 :(得分:0)

如果文件包含具有已知结构/文件格式的数据,则可以使用外部表。 UTL_FILE处于不同的抽象级别 - 您现在只是处理一个文件 - 您对UTL_FILE的使用会很脆弱并且可能会引入错误。决定因素不应该是表现;但是我怀疑你能否超越' Oracle使用REGEX和UTL_FILE滚动自己的外部表实现。