1

我正在尝试执行 select into 语句以从列中获取最大值。这就是我所拥有的:

   SELECT stdid INTO v_stdid 
   FROM (SELECT stdid FROM STUDENT ORDER BY stdid DESC)
   WHERE ROWNUM = 1;

我没有得到正确的值。它应该是 32,但返回的是 9(我有一个 dbms_output_line(v_stdid) 来检查该值。当我将顺序更改为 ASCENDING 我的值更改时,所以我知道发生了一些事情。但是为什么我不能得到正确的最大值?我觉得排序一定没有正确完成。

谢谢!

4

2 回答 2

0

TOP 关键字似乎对您有帮助。

SELECT stdid INTO v_stdid
FROM (SELECT TOP 1 FROM STUDENT ORDER BY stdid DESC);

我相信这可以消除您遇到的问题,方法是将第二个选择的前 1 个结果的 stdid 返回到 v_stdid,而不必担心 NUMROW 具有的一些复杂性,如下所示:

使用 rownum 选择表的第二行

于 2013-08-04T02:51:28.097 回答
0

你可以这样做:

SELECT max(stdid) INTO v_stdid 
FROM STUDENT;

但是,我相信你的问题是stdid被存储为一个字符而不是一个数字。因此,将其转换为整数:

select max(cast(stdid as int)) into v_stdid
from student;

这也适用于您的原始配方:

SELECT stdid INTO v_stdid 
FROM (SELECT stdid FROM STUDENT ORDER BY cast(stdid as int) DESC)
WHERE ROWNUM = 1;
于 2013-08-04T15:03:32.460 回答