【问题标题】:Set cursor order to desc but still start at beginning of table?将光标顺序设置为 desc 但仍从表的开头开始?
【发布时间】:2014-04-23 23:00:27
【问题描述】:

我在反转光标时遇到了一点麻烦。我有一个项目排名。如果输入是 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 设置为ascdesc(如order by rank asc, rank desc),但这没有用。 Reverse 不会更改输出中的任何内容。我查看了其他类似但无法找到答案的问题。我难住了。这一定很容易解决,但我似乎无法弄清楚它是什么。

【问题讨论】:

  • 当您提供给我们的只是代码的 sn-ps 时,很难判断发生了什么。也许您可以编辑问题并包括所有内容?谢谢。
  • 您的REVERSE 没有用,因为您实际上并没有在代码中的任何地方使用i 的值。无论如何,贾斯汀的答案是得到你想要的结果的方式。

标签: sql plsql oracle-sqldeveloper


【解决方案1】:

假设 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 会很有帮助与。

【讨论】:

  • 是的,没错。甚至没想过使用子查询。谢谢!
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2017-08-25
  • 2016-06-27
相关资源
最近更新 更多