ORA-00900 关于删除语句
ORA-00900 on delete statement
我正在尝试将 DELETE FROM
与 IN
子句和子查询一起使用,以删除另一个 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。
为什么关于页面没有更清楚地记录这一点,我不知道...
我正在尝试将 DELETE FROM
与 IN
子句和子查询一起使用,以删除另一个 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。
为什么关于页面没有更清楚地记录这一点,我不知道...