Я пытаюсь выполнить петлю через результат курсора (plpgsql), но как-то ничего не печатается на выходной консоли.Перемещение по курсору результатов
Как реализовать правильный цикл?
базы данных Версия: 9,0 Таблица магазины с колоннами ID, имя
Я пытаюсь выполнить петлю через результат курсора (plpgsql), но как-то ничего не печатается на выходной консоли.Перемещение по курсору результатов
Как реализовать правильный цикл?
базы данных Версия: 9,0 Таблица магазины с колоннами ID, имя
Прежде всего, ваша функция не возврат ничего, вы просто производить уведомления. В pgAdmin они будут выводиться на панели «Сообщения», а не на панели «Выход данных».
Я предполагаю, что вы хотите фактически вернуть значения ...
Но, как правило, вам не нужен явный курсор для цикла. Используйте более удобный неявное курсор в FOR
цикла:
CREATE OR REPLACE FUNCTION test_loop()
RETURNS SETOF int AS
$func$
DECLARE
_id int; -- assuming data type integer
BEGIN
FOR _id IN
SELECT id FROM stores ORDER BY id
LOOP
RETURN NEXT _id;
END LOOP;
END
$func$ LANGUAGE plpgsql;
Обратите внимание на синтаксис вызова:
SELECT * FROM test_loop();
Как правило, вы даже не нужен цикл. Попросту SQL ...
CREATE OR REPLACE FUNCTION test_loop1()
RETURNS SETOF int AS
$func$
BEGIN
RETURN QUERY
SELECT id FROM stores ORDER BY id;
END
$func$ LANGUAGE plpgsql;
Что может быть упрощена к функции SQL:
CREATE OR REPLACE FUNCTION test_loop2()
RETURNS SETOF int AS
$func$
SELECT id FROM stores ORDER BY id;
$func$ LANGUAGE sql;
Похожие ответы с большим количеством деталей и объяснения:
Да. Первый пример работает. Но что, если я не хочу использовать цикл? Как я могу затем прочитать значения отдельно и вернуть их? – Pradeep
Этот вопрос также должен содержать определение таблицы и версию Postgres. –
@ErwinBrandstetter обновил вопрос – Pradeep
Но это не определение таблицы. Определение таблицы - это полный скрипт CREATE TABLE, показывающий типы данных и ограничения, или то, что вы получаете с помощью '\ d tbl' в psql. –