Ответ 1
Вы очень редко хотите явно использовать курсоры вообще в PostgreSQL, даже при обработке результатов запроса в plpgsql. Это заметный контраст со многими другими базами данных SQL, где они используются почти все время.
В plpgsql вы можете просто написать что-то вроде:
DECLARE
emp employee%rowtype;
BEGIN
FOR emp IN SELECT * FROM employee LOOP
IF emp.active THEN
RAISE INFO 'Active: %', emp.employee_id
END IF;
END LOOP;
END
В приведенном выше примере обработчик языка plpgsql имеет дело с открытием, привязкой, извлечением и закрытием (подробнее на declarations и структуры управления).
С PostgreSQL от 9.0 вы можете просто перейти к выполнению plpgsql с помощью блока "DO". Для предыдущих версий вам необходимо создать функцию и выбрать ее. Если вы ищете эквивалент PostgreSQL, например, итерации через результат с помощью курсора на SQL Server, что это такое. Обратите внимание, что итерация и т.д. Не являются частью диалекта SQL, а только частью plpgsql (или любого другого языка с emebedded).
Синтаксис "DECLARE CURSOR xxx" на уровне SQL можно использовать следующим образом:
DECLARE cur_employees CURSOR FOR SELECT * FROM employee;
FETCH NEXT FROM cur_employees;
// etc..
CLOSE cur_employees;
Это можно использовать для тщательного получения только части набора результатов запроса. Тем не менее, необычно использовать их, поскольку обычно ваш клиентский драйвер предоставляет некоторую функцию для этого (например, прокручиваемые результирующие наборы в JDBC). Вы также можете возвращать курсоры из функций, подобных Oracle, хотя опять-таки это сравнительно редкий случай использования.