В приложениях, что'ы и "долго", чтобы держать открытые сделки до фиксации или отката? Минут? Секунд? Часов?
и на какой базе?
Я'м, вероятно, собирается получить обругают за это, но вы действительно должны попробовать и избежать использования курсоров как они несут серьезную производительность. Если вы должны использовать его, вы должны держать его открытым абсолютное минимальное количество времени, таким образом, вы освободите ресурсы заблокирован курсор как можно скорее.
сделки: минут.
Курсоры: 0seconds максимум, если вы используете курсор, мы увольняем вас.
Это не смешно, если учесть, что мы находимся в высокой доступности веб-среде, что для запуска SQL-сервера, и мы не'т даже позвольте хранимых процедур из-за невозможности точно версия и поддерживать их. Если мы с помощью Oracle может.
В целом я согласен с других ответов: избегать курсоров, когда это возможно (в большинстве случаев) и закрыть их как можно быстрее.
Тем не менее: все зависит от окружающей среды вы'вновь работают.
@lomaxx, @ChanChan: по-моему курсоры знания-это лишь проблема на SQL Server и Sybase (Т-SQL и вариантов). Если ваша база данных является СУБД Oracle, то курсоры ваш друг. Я'вэ видел ряд случаев, когда использование курсоров фактически улучшить производительность. Курсоры невероятно полезный механизм и tbh, говорили что-то вроде "Если вы используете курсор, мы огнем тебя" - это немного смешно.
Сказав это, вы только хотите, чтобы держать курсор открыт на абсолютный минимум, который требуется. Указывая максимальное время будет произвольным и бессмысленно без понимания проблемной области.
@ninesided: проблемы с производительностью в сторону, это's также об использовании правильный инструмент для работы. Учитывая выбор, чтобы переместить курсор из запроса в код, я думаю, в 99 случаях из 100 лучше было бы положить, что зацикливание логики в какой-то управляемый код. Это позволит вам получить преимущества, используя отладчик, время компиляции проверка ошибок, типа безопасность и т. д.
Мой ответ на вопрос все тот же, если вы're с помощью курсора, закрыть его как можно скорее, в Oracle я'd также можно попробовать использовать явные курсоры.