ORA-00900 关于删除语句

ORA-00900 on delete statement

我正在尝试将 DELETE FROMIN 子句和子查询一起使用,以删除另一个 table 上的查询给出的行,该查询与table 我正在从中删除,但 Oracle 11g2 向我吐出一个完全无用的 ORA-00900 错误,如下所示 SQL fiddle:

http://sqlfiddle.com/#!4/93171/1

对于那些无法达到 SQLfiddle 的人,我使用的 schema/initial 负载是(我使用 varchar 而不是 varchar2 为了测试可移植性,"wild" 数据使用 varchar2 代替):

create table obj (id integer primary key, data varchar(100));
create table meta(id integer primary key, imported char(1));

insert into obj (id, data) values (1, 'foo');
insert into obj (id, data) values (2, 'bar');
insert into obj (id, data) values (3, 'baz');
insert into obj (id, data) values (4, 'blurf');
insert into obj (id, data) values (5, 'hurf');
insert into meta (id, imported) values (1, 'T');
insert into meta (id, imported) values (2, 'F');
insert into meta (id, imported) values (3, 'T');
insert into meta (id, imported) values (4, 'F');
insert into meta (id, imported) values (5, 'F');

我正在尝试 运行 的陈述是:

delete from obj where obj.id in (select meta.id from meta where meta.imported = 'F');
select * from obj full outer join meta on obj.id = meta.id;

(select ... full outer join 运行本身,如果我仍然注释掉它仍然会出错,所以它不是ORA-00900的来源。)

P.S。此声明也有效 SQL - SQL Server 2014 和 PostgreSQL 9.3 都没有 fiddle 的问题,并且它在 [= 的本地副本中工作38=]ite 3.8.8.3 以及 full outer join 切换为 inner join.

也许您需要通过反转 table 并仅采用空值

将左联接与左联接合并
select * from obj left join meta on obj.id = meta.id 
union all
select * from meta left join obj  on obj.id = meta.id 
where obj.id is null 

这确实是 SQLFiddle 中的一个问题 -- 当我 运行 针对我正在使用的实际数据库的删除语句形式时,不会发生 ORA-00900。

为什么关于页面没有更清楚地记录这一点,我不知道...