Использование курсора
SQL-сервер способен возвращать в результате выполнения запроса сотни тысяч строк. Клиентские приложения не всегда могут справиться с такими объемами данных, т.к. для их хранения требуется много памяти. Решением этой проблемы является использование курсора.
Курсоры SQL-сервер представляют собой механизм обмена данными между сервером и клиентом. Курсор позволяет клиентским приложениям работать не с полным набором данных, а только с одной или несколькими строками.
Набор данных, имеющихся в таблице, называется полным набором строк. Набор строк, возвращаемый командой Select, называется результирующим набором. Курсоры работы с результирующим набором данных расширяют возможности пользователей по их обработке.
Всегда, когда возможно, следует избегать использования курсоров и работать со стандартными командами обработки данных: Select, Insert, Update, Delete.
Скорость выполнения операций обработки данных с помощью курсора заметно ниже, чем у стандартных средств SQL-сервер.
Существует 4 основных типа курсоров, различающихся по предоставляемым возможностям. Тип курсора определяется на стадии его создания и не может быть изменен.
1. Статические курсоры
При открытии статического курсора (курсора моментального снимка) сервер выбирает все данные, соответствующие заданным критериям, и сохраняет полный результирующий набор строк в системной БД tempbd.
На время открытия курсора сервер устанавливает блокировку на все строки, включенные в полный результирующий набор курсоров. Статический курсор не изменяется после создания и всегда отображает тот набор данных, который существовал в БД на момент его открытия. Внесение изменений в статические курсоры невозможно, т.к. нет гарантии существования неизменности строк данный, на основе которых построен курсор.
2. Динамические курсоры
При использовании динамических курсоров не создается полная копия исходных данных, а выполняется динамическая выборка данных из исходных таблиц при обращении пользователя к тем или иным данным. Сервер блокирует строки на время выборки и все изменения, вносимые пользователями в полный результирующий набор курсора, будут видны в курсоре при выборке. Если пользователь внес изменения в данные уже после из выборки курсором, то эти изменения не будут отражаться в курсоре.
3. Последовательные курсоры
Они не разрешают выполнять выборку данных в обратном направлении, т.е. пользователь может выбирать строки данных только от начала к концу.
4. Ключевые курсоры
Курсоры, зависящие от набора ключей (ключевые), построены на основе уникальных идентификаторов. Ключевой курсор представляет собой набор ключей, идентифицирующих строки полного результирующего набора курсора. Т.к. сохраняется информация только о ключевых полях строк, ключевые курсоры отражают все изменения, вносимые другими пользователями.