有了这句话:
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY)
WHERE ROWNUM = 1;
为什么会出现这个错误:
第1行出错:
ORA-00933:SQL命令未正确结束从站点按长度排序(城市)选择城市,长度(城市),其中ROWNUM=1
这是正确的语法。
SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE ROWNUM = 1
ORDER BY LENGTH(CITY) ;
如果您使用的是Oracle 12c,而不是ROWNUM
,您还可以使用FETCH FIRST
子句:
create table station (
city varchar2(200)
);
insert into station (city) values ('New York');
insert into station (city) values ('Rio');
insert into station (city) values ('Tokyo');
select city, length(city)
from station
order by length(city)
fetch first 1 rows only
;
-- Rio 3
尤其是如果您不希望前N行按某种标准排序,但下N行也在以后的调用中排序。那么OFFSET x ROWS FETCH NEXT x ROWS ONLY
比嵌套的ROWNUM
s更容易使用。
详见http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702(Ctrl-F"row_limiting_clause")。
你可能想要这个:
select * from (
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY)
) WHERE rownum = 1;
您的查询中有一个语法错误,因为ORDER BY
在WHERE
子句之后。因此,在修复语法错误后,您将得到这个:
SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE ROWNUM = 1
ORDER BY LENGTH(CITY)
如果您还记得,WHERE
子句是在ORDER BY
子句之前计算的。因为,ROWNUM pseudocolumn返回一个数字,指示Oracle从一个表或一组连接行中选择行的顺序。选定的第一行的ROWNUM
值为1,第二行的值为2,依此类推。ROWNUM
返回值1,2,3,。。。根据从表站
获取数据的顺序(可以是任何顺序),这可能不是您想要的。
如果在子查询中嵌入
ORDER BY
子句,并将ROWNUM
条件放在顶级查询中,则可以在对行排序后强制应用ROWNUM
条件。
所以,你可以这样问:
select * from (
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY)
) WHERE rownum = 1;
在这种情况下,首先根据子查询中城市列内容的长度对行进行排序,然后按照城市列长度的递增顺序应用
ROWNUM
。因此,现在可以使用ROWNUM=1
谓词筛选出第一行。
或者,在Oracle database 12c及更高版本中,您可以使用
FETCH FIRST N ROWS ONLY
子句来简化您的工作(无需子查询)。
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY)
FETCH FIRST 1 ROW ONLY;
在完成排序并返回最上面的一行后,将对该子句进行求值。
问题内容: 相当基本的sql命令。只想从我正在遍历的不同表中获取计数。但是,如果我更改sqlCommand并添加“;” 最后我得到异常,SQL命令未正确结束。 我很好奇为什么分号会引发此异常,因为命令应该以“;”结尾 问题答案: 半冒号通常仅用作sqlplus等交互式工具的命令终止符。
我遇到了一个甲骨文错误, ORA-00933:SQL命令未正确结束 有以下几点。 我在每个语句末尾的“/”前面加了分号。 有什么建议我可能错了吗?
我试图从MySQL移动到Oracle和我的一个查询最初看起来像这样 然而,当我在ORACLE中运行同一个查询时,只做了一个小改动。。。 它给了我以下错误: SQL错误:ORA-00933:SQL命令未正确结束00933。00000-“SQL命令未正确结束” Oracle SQL Developer工具强调了声明部分的一个问题 作为t1 我读了一些其他的问题,提到在Oracle语句的某些部分周围放置
问题内容: 当我输入这个 我收到关注错误 ORA-00933:SQL命令未正确结束 问题答案: 在Oracle中,您不能像这样指定多组值(我猜您来自允许该语法的MySQL背景)。最简单的方法是生成多个语句 您还可以使用单个语句插入多行
我正在尝试创建一个where子句作为参数传递给Oracle命令,事实证明这比我想象的要困难得多。我想做的是根据应用程序中的用户输入创建一个大型where查询。其中query是语句的单个参数,并且将包含多个and、OR条件。但这里的代码并不完全符合我的要求: 如果我将下面的行更改为我想要的结果类型,那么我会得到一个错误"ORA-00933:SQL命令未正确结束": 我的问题是,如何在不导致此错误的情
目的是仅当同一个表中不存在相同的记录时,才将记录插入表中。所以,我将该表的值存储在如下游标中:- 现在,我将使用如下的内部联接从表中删除记录- 执行此删除语句时,我收到错误-'ORA-00933:SQL命令未正确结束' 如果我能够从表中删除记录,我将使用以下代码从游标数据中插入相同的记录到相同的表中:- 我的目标是,仅当同一个表中不存在相同的记录时,才将记录插入表中。 请指导如何处理delete语