4

重複の可能性:
行番号がクエリで機能しない

どのように機能するかについていくつかのテストを実行していますrownum。次のクエリの出力を誰かが説明してください。具体的には、3 番目のクエリが 0 行を返す理由です。

クエリ 1 - 2456 行を返す

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id);

クエリ 2 - 100 行を返す

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id)
where rownum between 1 and 100;

クエリ 3 - 0 行を返します

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id)
where rownum between 101 and 400;

ありがとう

4

1 に答える 1

13

rownum は、行がフェッチされ、他の述語が評価された後にのみ評価されます。それが鍵です。したがって、select * from table where rownum >= 2; と言うと、

次のように機能するため、機能することはありません

open cursor loop
  fetch row (rownum is evaluated as the last thing here)
    if fetched then rownum = rownum + 1
end cursor

> 1 から始まる rownum を要求した場合、決して真ではありません。必要に応じてページネーションを行うには、次のようにコーディングする必要があります

select *
  from (select rownum r, t.*
          from your query tables
         order by ..)
 where r>=101 
   and rownum <= 400

こちらのアスクトムでもお読みください

于 2012-11-12T21:07:23.690 に答える