Проблема с курсором Oracle - PullRequest
       19

Проблема с курсором Oracle

1 голос
/ 06 октября 2008

Кто-нибудь знает, как сделать следующее?

объявить курсор открыть курсор получить курсор << Начать чтение курсора в цикле >> Допустим, у курсора 10 записей. Прочитайте до 5-й записи, затем перейдите к 6-й записи и выполните проверку.

Теперь можно ли вернуться к 5-й записи с 6-й записи?

Ответы [ 2 ]

9 голосов
/ 06 октября 2008

Зависит от требований.

Вы можете использовать аналитические функции 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 COLLECT данных в эти коллекции (используя предложение LIMIT, если у вас больше данных, чем вы хотите сохранить в PGA), а затем двигаться вперед и назад по своим коллекциям.

0 голосов
/ 06 октября 2008

Как далеко вам нужно вернуться? Если вам нужен только просмотр одной строки, вы можете буферизовать только предыдущую строку в цикле (на стороне приложения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...