2011-02-10 5 views
1

나는 테이블에있을 수있는 레코드를 먼저 삭제 한 다음 레코드를 삽입하는 dml 파일을 작성하고 있습니다. 예 : I는 그 자체로 삽입 문을 실행하면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

하나 삭제가이 필드 1의 상태와 fields1의 다른있다. 그건 제대로 작동하지 않습니다. – 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; 

내가했던 기억하는 것하지만 오라클의 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');