Вы очень редко хотите явно использовать курсоры в 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Обработчик имеет дело с открытием, связыванием, извлечением и закрытием (подробнее о объявлениях и управляющих структурах ).
С 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, хотя, опять же, это сравнительно редкий вариант использования.