0

Oracle 12c を使用してページネーションを実装しているときに、とORDER BYを組み合わせて使用​​すると問題が発生しました。OFFSETFETCH NEXT <X> ROWS ONLY

私のテストテーブルtest:

+----+---------------------+
| ID |        NAME         |
+----+---------------------+
|  1 | Customer Support    |
|  2 | Property Management |
|  3 | Security            |
|  4 | Security            |
|  5 | Security            |
|  6 | Security            |
|  7 | Tax Compliance      |
+----+---------------------+

次のSQLを実行しています:

SELECT  id
FROM            test
ORDER BY        name ASC   
OFFSET <offset> ROWS   
FETCH NEXT 1 ROWS ONLY;

これらの結果:

+--------+--------+-----------------+
| Offset | Result | Expected result |
+--------+--------+-----------------+
|      0 |      1 |               1 |
|      1 |      2 |               2 |
|      2 |      3 |               3 |
|      3 |      4 |               4 |
|      4 |      4 |               5 |
|      5 |      4 |               6 |
|      6 |      7 |               7 |
+--------+--------+-----------------+

質問

問題は、DB が期待される結果を返さないのはなぜですか?

noORDER BYを使用すると、問題なく動作します。このような使用は禁止されていますか?私はそれを間違って使用していますか?もしそうなら、この種の使用は不可能であると書かれているドキュメントを教えてください。私が使用しているバージョンは 12c ですが、同じ動作が 19c にも当てはまります。

その他のクエリ例

クエリOFFSETのみ:

SELECT  id
FROM            test
ORDER BY        name ASC   
OFFSET 4 ROWS;

結果:

+----+
| ID |
+----+
|  5 |
|  6 |
|  7 |
+----+

OFFSETとでクエリFETCH NEXT 1 ROWS ONLY:

SELECT  id
FROM            test
ORDER BY        name ASC   
OFFSET 4 ROWS
FETCH NEXT 1 ROWS ONLY;

結果:

+----+
| ID |
+----+
|  4 |
+----+

ありがとうございました

アダム

4

1 に答える 1