将光标顺序设置为desc但仍然从表的开头开始?

时间:2014-04-23 23:00:28

标签: sql plsql oracle-sqldeveloper

我在反转光标方面遇到了一些麻烦。我有一个项目排名。如果输入为2,我想选择项目1和2,但显示如下;

RANK
2
1

现在,当我输入2时,我得到了

RANK
231
230

这是表的结尾,而不是开头。

我的光标只是

select rank, item
from itemtable
order by rank desc;

在循环中使用如下:

FOR i IN REVERSE 1..v_num LOOP
        DBMS_OUTPUT.PUT_LINE(to_char(v_RANK) || to_char(v_ITEM);            
      FETCH c_rank INTO v_rank, v_item;
        EXIT WHEN c_rank%NOTFOUND;
        END LOOP;

v_num是要显示的项目数。我已尝试将order by设置为asc然后desc(例如order by rank asc, rank desc),但这不起作用。 Reverse不会更改输出中的任何内容。我看过其他类似的问题,但无法找到答案。我很难过。这必须是一个简单的解决方案,我似乎无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:3)

假设v_num应该是您想要返回的元素数量,这听起来像是您想要做的事情

select *
  from (select rank, item
          from itemtable
         order by rank asc)
 where rownum <= v_num
 order by rank desc

如果那不是您所追求的,那么发布一个测试用例(用于创建表的DDL,用于填充该表的DML以及预期结果)或我们的link to a fiddle会很有帮助可以使用。