我正在构建一个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;
当我单独运行insert语句时,它运行正常。当我运行删除时,只运行最后一次删除。
另外,似乎有必要用select结束多次插入,是这样吗?如果是这样,为什么这是必要的? 在过去,当使用MySQL时,我只能列出多个删除和插入语句,所有这些都以分号结尾,并且运行正常。
答案 0 :(得分: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 :(得分:1)
您不想要的任何特殊原因:
insert into foo(field1, field2) values('bar', 'x');
insert into foo(field1, field2) values('bazz', 'y');