2011-02-10 13 views
1

私は、まずテーブルにあるレコードを削除した後、レコードを挿入するdmlファイルを作成しています。 例:私は、それ自体でINSERT文を実行するとOracle 10g複数のDELETE文

DELETE from foo where field1='bar'; 
DELETE from foo where fields1='bazz'; 

INSERT ALL 
INTO foo(field1, field2) values ('bar', 'x') 
INTO foo(field1, field2) values ('bazz', 'y') 
SELECT * from DUAL; 

、それが正常に動作します。削除を実行すると、最後の削除のみが実行されます。

また、選択で複数の挿入を終了する必要があるようですが、そうですか?もしそうなら、なぜそれが必要ですか? これまでMySQLを使用していたときに、複数のdelete文とinsert文をリストすることができましたが、それぞれ個別にセミコロンで終わります。

+0

ひとつは削除があるfields1上のフィールド1とその他の条件があります。それは正しく動作しません。 – btilly

+0

auto_commitをtrueに設定しましたか? – codymanix

+0

INSERT ALLにはクエリが必要です。 DUALのSELECTは非常に高速です(実際はOracle 11gではNO-OPです)。 –

答えて

1

DELETEの中でfield1またはfields1のいずれかと呼んでいるので、誤字があるようです。

あなたはそれを難し​​い方法でやっています。

DELETE FROM Foo WHERE Field1 in ('bar', 'bazz'); 

INSERT INTO Foo (Field1, Field2) 
    SELECT 'bar', 'x' FROM System.dual UNION 
    SELECT 'bazz', 'y' FROM System.dual; 

私はそれがなかった思い出すように見えるが、Oracleは、FROM System.dualを必要とする場合はわかりません。 SQL Serverでは、代わりにSELECT 'bar', 'x'が許可されます。

1

あなたがしたくない特別な理由:

insert into foo(field1, field2) values('bar', 'x'); 
insert into foo(field1, field2) values('bazz', 'y');