2011-02-10 69 views
1

我正在构建一个dml文件,它首先删除表中可能存在的记录,然后插入记录。 例子: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; 

当我在自己独立运行的INSERT语句,它运行良好。当我运行删除时,只有最后一次删除运行。

此外,它似乎有必要结束多选插入,是这样吗?如果是这样,为什么这是必要的? 在过去,当使用MySQL时,我可以列出多个删除和插入语句,所有语句都以分号结尾,并且运行良好。

+0

删除其中一部是对FIELD1一个条件,另一个在fields1。这将无法正常工作。 – btilly 2011-02-10 18:19:08

回答

1

由于您在DELETE中将其称为field1fields1,您显然有一个错字。

尽管如此,你正在努力做到这一点。

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');