sql - 根据一组排序的主键检索数据

标签 sql oracle plsql

我有一组主键。该集合按照记录的显示方式排序。

我想按照与排序集中相同的顺序从数据库中检索记录。

目前我正在这样做:

  cursor getdata is
  select snr,    -- snr is the primary key
         field1,
         field2,
         field3
   from  MyTable,
         (select COLUMN_VALUE snr, rownum sort_key from TABLE(varray_of_snr)) snr_tab
   where MyTable.snr = snr_tab.snr
   order by snr_tab.sort_key;

问题在于 Oracle 不必按照 varray 中的顺序读取内部 select 中的行。无法保证 Oracle 不会从内部 select 中的 varray 中以相反的顺序读取行。

是否有一种简单的方法来保证保留排序顺序?

最佳答案

据我所知,除非指定 ORDER BY,否则永远无法保证任何数据集的 ORDER。

如果数组的顺序是任意的,我建议包括一个在存储数据时填充的 row_id 字段。仅当您可以推断排序并使用 ORDER BY 子句时,才应使用 rownum

关于sql - 根据一组排序的主键检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8296033/

相关文章:

sql - 如何避免多次数据库往返和大量无关数据?

java - Spring JPA Java [ ORA-01861 文字与格式字符串不匹配 ]

java - 使用任何 SQL 查询的数据类型范围值

oracle - 如何在不使用 OTHERS 子句的情况下捕获 PLSQL 中的 TO_TIMESTAMP 或 TO_DATE 异常?

sql - Oracle PL/SQL 中的 For In 循环

mysql - 在 MySQL 的一个查询中使用不同值更新多行

php - 如何限制 HTML 中的列数

sql - 如果您不构建数据仓库,应该如何将维度表与事实表分开?

Oracle Apex 有条件地显示表单字段

javascript - 如何在 Oracle Apex 5.1 中动态添加一个或多个文本框到一个区域?