2016-11-22 4 views
-1

私はTOAD、Oracle 11gを使用しました。TOADから挿入スクリプトを実行

バッチ挿入スクリプトを作成したいと思います。

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

しかし、私は、エクスポートデータセットを使用する場合 - ステートメントを挿入し、私が手に:あまりにも多くの行があるので、

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は

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

のように値句でmutlitple行を挿入するためにサポートしていません。あなたは、Oracleの選択INSERT INTOこれを変換する必要があると思います:

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; 

または書き込みあなた自身が既に示したように、別のinsert文を使用します。

0

私は毎日の監査で、数行から数千に更新する必要があります。私はコードを 'Begin/commit/end'で囲み、一度に1つずつ更新を実行するのにかかる時間(分)ではなく、数秒で実行します。

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ブロックに分割して再実行し、すべて正常に機能しました。

関連する問題