Oracle 10g несколько операторов DELETE - PullRequest
1 голос
/ 10 февраля 2011

Я создаю файл dml, который сначала удаляет записи, которые могут находиться в таблице, а затем вставляет записи.Пример:

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 я мог просто перечислить несколько операторов удаления и вставки, каждый из которых заканчивался точкой с запятой, и все работало бы нормально.

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Любая конкретная причина, по которой вы не хотите:

insert into foo(field1, field2) values('bar', 'x');
insert into foo(field1, field2) values('bazz', 'y');
1 голос
/ 10 февраля 2011

У вас очевидно есть опечатка, так как вы называете ее либо 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'.

...