2016-11-22 93 views
-1

我使用了TOAD,Oracle 11g。從TOAD執行插入腳本

我想創建批量插入腳本。

INSERT INTO tbl_name (a,b,c) 
VALUES(1,2,3),(4,5,6),(7,8,9); 

但是,當我使用的出口數據集 - insert語句,我得到:

Insert into tbl_name (1, 2, 3) 
    Values (1, 2, 3); 

Insert into tbl_name (1, 2, 3) 
Values (1, 2, 3); 

因此,它需要很長的時間,因爲有太多的行。

有沒有辦法?

謝謝!

+1

Oracle不支持多行插入語句。你可以做的唯一方法是使用多個插入。您的第一條語句的語法不適用於Oracle。 –

+0

啊...好的。謝謝! – BaeDa

回答

1

不幸的是Oracle不支持插入的價值觀條款mutlitple排在

INSERT INTO tbl_name (a,b,c) VALUES (1,2,3),(4,5,6),(7,8,9); 

你必須將其轉換成一個插入選擇甲骨文:

INSERT INTO tbl_name (a,b,c) 
    SELECT 1,2,3 FROM DUAL 
    UNION ALL 
    SELECT 4,5,6 FROM DUAL 
    UNION ALL 
    SELECT 7,8,9 FROM DUAL; 

或寫單獨的插入語句就像你已經顯示的那樣。

0

我有一個每日審計,我必須從幾行更新到幾千。我用'開始/提交/結束'來包圍代碼,並且它在幾秒鐘內執行而不是一次運行更新所需的分鐘數。

begin 
update my_audit set audit_date = sysdate, audit_by = trim(q'{DBA for DLD}'), audit_comments = trim(q'{ RFC-009999 Fix blah blah blah for 1000 entries }') , audit_complete = 'Y' where row_id = 4754973; 
    ... 998 update statements here ... 
update my_audit set audit_date = sysdate, audit_by = trim(q'{DBA for DLD}'), audit_comments = trim(q'{  RFC-009999 Fix blah blah blah for 1000 entries }') , audit_complete = 'Y' where row_id = 4755973;  
commit; 
end; 

,當我試圖與50,000行做到這一點我也遇到了內存不足的問題。我把它分解成多個begin/commit/end塊並重新運行,並且一切正常。