2015-07-20 85 views
2

我在我的Oracle表中有一個包含1,000,000條記錄的表。如何使用SQL Developer爲全表數據生成單個插入語句?

我可以使用SQL Developer生成1,000,000個插入語句作爲腳本。

但是運行這個腳本需要很多時間。

有什麼辦法可以爲表中的所有值生成1個單一的插入語句,當我知道運行時不會花費那麼多時間。

+1

之後你想怎麼處理你的腳本? – pablomatico

+0

我想運行在另一個數據庫的腳本,所有插入將被執行 –

回答

1

最簡單的方法是創建一個匿名PL/SQL塊:

begin 
    --add 1 million inserts here 
    commit; 
end; 
/

這消除了幾乎所有的網絡的往返。這不是最有效的解決方案,但它是一個簡單的改變,非常接近最有效的解決方案。

創建一個很大的匿名塊可能會導致像PLS-00123: program too large (Diana nodes)這樣的錯誤。如果發生這種情況,請將程序分成 小塊,然後重試。

0

有什麼辦法可以爲表中的所有值生成1個單一插入語句,當我知道運行時不會花費那麼多時間。

你可以使用INSERT ALL聲明。

INSERT ALL語句用於使用單個INSERT語句添加多行。只能使用一條SQL命令將行插入一個表或多個表中。

例如,

INSERT ALL 
    INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM') 
    INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft') 
    INTO suppliers (supplier_id, supplier_name) VALUES (3000, 'Google') 
SELECT * FROM dual; 

這相當於3 INSERT語句。

+1

我不能使用SQL Developer生成這種類型的語法。我可能需要編輯並從1,000,000個插入語句中刪除語法的起始部分 –

相關問題