Gymterview
middle

Что такое курсор?

Курсор — объект базы данных, который позволяет обрабатывать строки результирующего набора по одной, а не весь набор сразу, как это делают обычные SQL-команды. Курсор действует как указатель (pointer) на текущую строку в результате запроса.

Аналогия из жизни: курсор — как закладка, которую вы перемещаете по списку. Обычный SELECT — это как прочитать весь список за раз, а курсор — это перемещение по нему строка за строкой.

Порядок работы с курсором

  1. DECLARE — определить курсор (привязать к SQL-запросу)
  2. OPEN — открыть курсор (выполнить запрос)
  3. FETCH — получить следующую строку из курсора
  4. Обработать строку (бизнес-логика)
  5. CLOSE — закрыть курсор
  6. 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 подход. Частая ошибка — не знать, что курсоры значительно медленнее операций над множествами.