Неявный курсор

  • Часть 1
  • | 2

Например, в теле ХП использование неявного курсора может выглядеть следующим образом:

DECLARE LAccountCD VARCHAR(6); DECLARE LFio VARCHAR(20); DECLARE LPayDate DATE; DECLARE LPaySum NUMERIC(15,2); BEGIN

FOR SELECT A. AccountCD, A.Fio, P. PayDate, P. PaySum FROM Abonent A, PaySumma P

WHERE A. AccountCD = P. AccountCD AND P. PaySum > 70 INTO :LAccountCD, :LFio, :LPayDate, :LPaySum DO

SUSPEND; END. Следует отметить важную особенность работы с курсорами. Они позволяют обеспечить обновление или удаление строки, на которой в данный момент установлен курсор, с помощью конструкции WHERE CURRENT OF в запросе UPDATE или DELETE. В этом случае <группа_операторов> при обновлении строки, на которой установлен курсор, должна выглядеть следующим образом: UPDATE базовая_таблица SET … WHERE CURRENT OF имя_курсора;.

При удалении строки, на которой установлен курсор, <группа_операторов> должна выглядеть следующим образом:

DELETE FROM базовая_таблица

WHERE CURRENT OF имя_курсора;.

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

предыдущаяследующая