Что такое курсор?
Курсор — объект базы данных, который позволяет обрабатывать строки результирующего набора по одной, а не весь набор сразу, как это делают обычные SQL-команды. Курсор действует как указатель (pointer) на текущую строку в результате запроса.
Аналогия из жизни: курсор — как закладка, которую вы перемещаете по списку. Обычный
SELECT— это как прочитать весь список за раз, а курсор — это перемещение по нему строка за строкой.
Порядок работы с курсором
DECLARE— определить курсор (привязать к SQL-запросу)OPEN— открыть курсор (выполнить запрос)FETCH— получить следующую строку из курсора- Обработать строку (бизнес-логика)
CLOSE— закрыть курсорDEALLOCATE— освободить ресурсы (удалить ссылку курсора)
Пример
DECLARE emp_cursor CURSOR FOR
SELECT id, name, salary FROM employees WHERE department = 'IT';
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor; -- получить первую строку
-- ... обработка ...
CLOSE emp_cursor;
DEALLOCATE emp_cursor;
Когда НЕ стоит использовать курсоры
В подавляющем большинстве случаев курсоры — антипаттерн. SQL ориентирован на работу с множествами (set-based operations), и один оператор UPDATE или SELECT обычно эффективнее цикла по курсору. Курсоры оправданы, когда для каждой строки нужна сложная процедурная логика, которую невозможно выразить в SQL (например, вызов внешней процедуры для каждой строки).
На собеседовании: опишите порядок работы с курсором и обязательно упомяните, что в большинстве случаев курсоры — антипаттерн, и лучше использовать set-based подход. Частая ошибка — не знать, что курсоры значительно медленнее операций над множествами.