В зависимости от требований.
Вы можете использовать LAG() и LEAD() аналитические функции, чтобы получить информацию для последующих и предыдущих строк, то есть
SQL> ed
Wrote file afiedt.buf
1 select ename,
2 sal,
3 lead(sal) over (order by ename) next_sal,
4 lag(sal) over (order by ename) prior_sal
5 from emp
6* order by ename
SQL>/
ENAME SAL NEXT_SAL PRIOR_SAL
---------- ---------- ---------- ----------
ADAMS 1100 1600
ALLEN 1600 2850 1100
BLAKE 2850 2450 1600
CLARK 2450 3000 2850
FORD 3000 950 2450
JAMES 950 2975 3000
JONES 2975 5000 950
KING 5000 1250 2975
MARTIN 1250 1300 5000
MILLER 1300 3000 1250
SCOTT 3000 800 1300
ENAME SAL NEXT_SAL PRIOR_SAL
---------- ---------- ---------- ----------
SMITH 800 1500 3000
TURNER 1500 1250 800
WARD 1250 1500
14 rows selected.
Если вы не хотите использовать аналитические функции, вы можете использовать PL/SQL, BULK СОБИРАЙТЕ данные в эти коллекции (используя предложение LIMIT, если у вас есть больше данных, чем вы хотите сохранить в PGA), а затем перемещайтесь вперед и назад через свои коллекции.
+1, особенно для использования аналитики для логики предыдущей строки. – 2008-10-06 12:19:47