Вы не описали, как вы пытаетесь объявить курсор, поэтому немного сложно понять, в чем проблема. Поэтому я опишу общий путь c для создания и извлечения курсора.
Сначала курсор живет только в течение транзакции, поэтому вы должны начать и держать транзакцию открытой.
BEGIN;
Далее необходимо объявить курсор и какие данные он будет содержать.
DECLARE <cursor_name> CURSOR FOR SELECT X, Y, Z FROM ...
Затем вам нужно извлечь строку из курсора.
FETCH FORWARD 1 FROM <cursor_name>;
Затем получить следующую строку.
FETCH NEXT FROM <cursor_name>;
И так далее, и дальше. Когда закончите, закройте курсор и завершите транзакцию.
CLOSE <cursor_name>;
END;
Это то, что вы делаете? Это не работает?