Вы очень редко хотите явно использовать курсоры вообще в 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 и control structures).
С PostgreSQL от 9.0 вы можете просто перейти к выполнению plpgsql с помощью блока «DO». Для предыдущих версий вам необходимо создать функцию и выбрать ее. Если вы ищете эквивалент PostgreSQL, например, итерацию через результат с помощью курсора на SQL Server, вот что это такое. Обратите внимание, что итерация и т. Д. - это , а не часть диалекта SQL, только часть plpgsql (или любого другого языка с emebedded).
«DECLARE CURSOR ххх» синтаксис на уровне SQL может использоваться как это:
DECLARE cur_employees CURSOR FOR SELECT * FROM employee;
FETCH NEXT FROM cur_employees;
// etc..
CLOSE cur_employees;
Это может быть использовано, чтобы тщательно получить только часть результата запроса. Тем не менее, это необычно использовать, так как обычно ваш клиентский драйвер предоставляет некоторую функцию для этого (например, прокручиваемые результирующие наборы в JDBC). Вы также можете возвращать курсоры из функций, аналогичных Oracle, хотя опять-таки это сравнительно редкий случай использования.
Начните с добавления предложения WHERE для выбора активных. – aib
Прочитайте [главу о курсорах в руководстве] (http://www.postgresql.org/docs/9.1/interactive/plpgsql-cursors.html). –
я сделал, как вы сказали мне: DECLARE cur_employees CURSOR FOR SELECT * ОТ сотрудника где Active = «ACTIVE» ЗАКРЫТЬ cur_employees , но я получаю следующее сообщение об ошибке: – Karl