При написании хранимых процедур и триггеров очень часто возникает необходимость выбрать информацию из БД перед выполнением каких-либо других действий. Для таких целей в модулях на PSQL допускается использовать запрос на выборку следующего вида:
SELECT … INTO<список_переменных>;.
Однако запрос такого вида можно использовать только в случае, если он возвращает одно единственное значение (скалярный запрос) или только одну строку из одной или нескольких таблиц БД.
В большинстве случаев запрос к реляционной базе данных возвращает несколько записей данных, но приложение за один раз обрабатывает лишь одну запись. При модификации, удалении или добавлении данных с помощью запросов DML действия выполняются также над отдельной записью (строкой) таблицы. В этой ситуации на первый план выступает концепция курсора. Под курсором понимается получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи. Обычно курсоры используются для выбора из базы данных некоторого подмножества хранимой в ней информации. В каждый момент времени прикладной программой может быть обработана одна строка курсора. После позиционирования курсора над этой строкой можно выполнять различные действия.
Курсоры часто применяются в запросах SQL, встроенных в прикладные программы, написанные на языках процедурного типа.
PSQL СУБД Firebird поддерживает два типа курсоров: явные и неявные. Реализация неявного курсора представлена следующей конструкцией:
FOR SELECT ... INTO … DO … .
Она полностью реализует синтаксис цикла и предоставляет возможность последовательной построчной обработки набора данных курсора в цикле FOR.
Явный курсор, также называемый изменяемым или именованным курсором, представляет собой объект, который разработчик может явно объявлять, открывать и закрывать (в отличие от неявного курсора, не требующего объявления, открытия и закрытия). Для управления явным курсором используются команды DECLARE CURSOR, OPEN, FETCH и CLOSE. Рассмотрим более подробно особенности этих двух реализаций курсора.
предыдущаяследующая