Прокручиваемые курсоры

В современных приложениях на основе экрана пользователь прокручивает данные назад и вперед. Для таких приложений возврат к ранее извлекаемой строке является проблемой. Одна из возможностей заключается в закрытии и повторном открытии курсора, а затем получение строк до тех пор, пока курсор не достигнет требуемой строки. Еще одна возможность — считывать результирующий набор, кэшировать его локально и реализовывать прокрутку в приложении. Обе возможности хорошо работают только с небольшими результирующих наборами, и последняя возможность трудно реализовать. Лучше всего использовать прокручиваемый курсор, который может перемещаться назад и вперед в результирующем наборе.

Прокручиваемый курсор обычно используется в современных приложениях на основе экрана, в которых пользователь прокручивает данные назад и вперед. Однако приложения должны использовать прокручиваемые курсоры только в том случае, если курсоры, доступные только для перенаправления, не будут выполнять задание, так как прокручиваемые курсоры обычно дороже, чем курсоры только для перенаправления.

Возможность перемещения назад вызывает вопрос, не применимый к курсорам только для перенаправления: следует ли прокручиваемому курсору обнаруживать изменения, внесенные ранее в строки? То есть следует ли обнаруживать обновленные, удаленные и недавно вставляемые строки?

Этот вопрос возникает из-за того, что определение результирующий набор — набор строк, соответствующих определенным критериям, не указывает, когда строки проверка, чтобы узнать, соответствуют ли они этим критериям, и не указывает, должны ли строки содержать одни и те же данные при каждом получении. Прежнее упущение позволяет прокручиваемым курсорам определить, были ли вставлены или удалены строки, в то время как последний позволяет им обнаруживать обновленные данные.

Иногда полезно обнаруживать изменения, иногда это не так. Например, приложению бухгалтерского учета требуется курсор, который игнорирует все изменения; Балансировка книг невозможна, если курсор отображает последние изменения. С другой стороны, системе резервирования авиакомпаний требуется курсор, показывающий последние изменения данных; без такого курсора она должна постоянно повторно заставить базу данных, чтобы отобразить самую актуальную доступность полетов.

Для покрытия потребностей различных приложений ODBC определяет четыре различных типа прокручиваемых курсоров. Эти курсоры различаются как в расходах, так и в их способности обнаруживать изменения в результирующем наборе. Обратите внимание, что если прокручиваемый курсор может обнаруживать изменения строк, он может обнаруживать их только при попытке ссылки на эти строки; Источник данных не может уведомлять курсор об изменениях в текущий момент извлекаемых строк. Обратите внимание, что видимость изменений также контролируется уровнем изоляции транзакций; Дополнительные сведения см. в разделе "Изоляция транзакций".

Этот раздел содержит следующие подразделы.