Курсор - объект, позволяющий работать с областью памяти, в которой сохраняются записи указанного запроса данных. В стандарте определены три команды управления курсором:
· OPEN - открывает курсор;
· FETCH - берет текущую запись из результирующего набора записей. После каждого применения FETCH следующая запись становится активной. Структурная переменная или список переменных указанных во фрагменте INTO должны соответствовать столбцам записи;
· CLOSE - закрывает курсор, в большинстве СУБД закрытие курсора делается автоматически в конце блока, в котором курсор объявлен.
Oracle
В Oracle для определения успешного выбора записи используются два атрибута курсора:
· FOUND - истина, если запись найдена;
· NOTFOUND - истина, если запись не найдена.
Для сохранения данных всех записей курсора в массивы используется конструкция BULK COLLECT. Ниже приведен пример функции подсчитывающий число записей в таблице tblname с четным идентификатором с помощью курсоров.
-- создание функцииCREATE OR REPLACE FUNCTION curdemo RETURN integer IS -- курсор cursor cur is select * from tblname; -- можно указать какого типа будет запись курсора cursor cur2 return tblname%rowtype is select * from tblname; val tblname%rowtype; r integer:=0;BEGIN OPEN cur; loop FETCH cur INTO val; -- если записи нет EXIT WHEN cur%NOTFOUND; if mod(val.id,2)=0 then r:=r+1; end if; end loop; CLOSE cur; return(r);END curdemo; -- проверкаselect curdemo() from dual;