2009-08-18 24 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

相關問題