2009-08-18 61 views

回答

5

SQL * Loader正在生成INSERT语句,但非常关键的是,它使用绑定变量。如果您要加载数千行,则除了反转共享池之外,构建包含字符串文字的INSERT语句的速度要比使用绑定变量慢一个数量级。如果你生成一堆INSERT语句,Oracle必须解析每一条语句 - 这将很快消耗你的加载过程的绝大部分时间。根据共享池的大小,参数CURSOR_SHARING以及要加载的行数,插入语句文件可以非常容易地对共享池施加足够的压力,即加载进程(和/或其他不相关的进程恰好在需要解析新查询的同一时间运行)会出错,因为共享池中没有足够的连续空间。

您当然可以编写一个与传统路径加载相同的SQL * Loader应用程序。您的应用程序将需要做一些像

Prepare the statement 
Loop 
    Read the next row of data 
    Split the next row of data into columns 
    Bind the data to the bind variables in the prepared statement 
    Execute the prepared statement 
End loop 

这不仅仅是释放出数千对数据库独立的INSERT语句非常不同。

+0

+1很好的答案。 – 2009-08-18 21:18:35

相关问题