我在反转光标方面遇到了一些麻烦。我有一个项目排名。如果输入为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
不会更改输出中的任何内容。我看过其他类似的问题,但无法找到答案。我很难过。这必须是一个简单的解决方案,我似乎无法弄清楚它是什么。
答案 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会很有帮助可以使用。