【发布时间】:2018-06-09 19:32:21
【问题描述】:
我在 sql (oracle) 中有简单(但不那么聪明)的代码。 此 SQL 在 oracle 版本 12c 上可以正常工作,但在 oracle v. 11g 上存在异常。你能给我回答为什么吗?
create table app_status (id_status int, description varchar2(20 char), range_char char(1));
/
create table app (id_app int, description varchar2(20 char), range_char char(1));
/
insert into app_status (id_status, description,range_char) values (1,'opis 1','a');
insert into app_status (id_status, description,range_char) values (2, 'opis 2','b');
insert into app_status (id_status, description,range_char) values (3, 'opis 3','a');
insert into app_status (id_status, description,range_char) values (4, 'opis 4','a');
/
insert into app (id_app,description,range_char) values (1,'app 1','a');
insert into app (id_app,description,range_char) values (2,'app 2','a');
insert into app (id_app,description,range_char) values (3,'app 3','a');
insert into app (id_app,description,range_char) values (4,'app 4','b');
insert into app (id_app,description,range_char) values (5,'app 5','a');
insert into app (id_app,description,range_char) values (6,'app 6','a');
insert into app (id_app,description,range_char) values (7,'app 7','c');
insert into app (id_app,description,range_char) values (8,'app 8','a');
insert into app (id_app,description,range_char) values (9,'app 9','a');
/
-- this query does not work on oracle v.11g
select * from app where not exists (
select id_status from (
select id_STATUS FROM APP_STATUS
WHERE APP_STATUS.RANGE_CHAR = APP.RANGE_CHAR
ORDER BY ID_STATUS DESC
) WHERE ROWNUM=1);
我在 oracle 11g 的规范中找不到信息,为什么它不起作用。也许它在 12c 上是不正确的,但更高版本可以容忍不规则性?
【问题讨论】:
-
Oracle 11g 有什么异常?
-
select * from app where not exists (select id_status from (select id_STATUS FROM APP_STATUS WHERE APP_STATUS.RANGE_CHAR = APP.RANGE_CHAR ORDER BY ID_STATUS DESC ) WHERE ROWNUM=1) 命令行错误:23 列: 123 错误报告 - SQL 错误:ORA-00904:“APP”。“RANGE_CHAR”:无效标识符 00904。00000 -“%s:无效标识符”*原因:*操作:
标签: oracle oracle11g oracle12c