我在我的Oracle表中有一個包含1,000,000條記錄的表。如何使用SQL Developer爲全表數據生成單個插入語句?
我可以使用SQL Developer生成1,000,000個插入語句作爲腳本。
但是運行這個腳本需要很多時間。
有什麼辦法可以爲表中的所有值生成1個單一的插入語句,當我知道運行時不會花費那麼多時間。
我在我的Oracle表中有一個包含1,000,000條記錄的表。如何使用SQL Developer爲全表數據生成單個插入語句?
我可以使用SQL Developer生成1,000,000個插入語句作爲腳本。
但是運行這個腳本需要很多時間。
有什麼辦法可以爲表中的所有值生成1個單一的插入語句,當我知道運行時不會花費那麼多時間。
最簡單的方法是創建一個匿名PL/SQL塊:
begin
--add 1 million inserts here
commit;
end;
/
這消除了幾乎所有的網絡的往返。這不是最有效的解決方案,但它是一個簡單的改變,非常接近最有效的解決方案。
創建一個很大的匿名塊可能會導致像PLS-00123: program too large (Diana nodes)
這樣的錯誤。如果發生這種情況,請將程序分成 小塊,然後重試。
有什麼辦法可以爲表中的所有值生成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語句。
我不能使用SQL Developer生成這種類型的語法。我可能需要編輯並從1,000,000個插入語句中刪除語法的起始部分 –
之後你想怎麼處理你的腳本? – pablomatico
我想運行在另一個數據庫的腳本,所有插入將被執行 –