PL / pgSQL "для цикла" + выберите базовый пример ("привет мир") - PullRequest
0 голосов
/ 11 апреля 2019

Я уже некоторое время использую Postgres, но я совершенно новичок в PL / pgSQL.

Я изо всех сил пытаюсь заставить работать базовый цикл .

Это прекрасно работает:

-- Without SELECT
DO $$
BEGIN 
  FOR counter IN 1..6 BY 2 LOOP
    RAISE NOTICE 'Counter: %', counter;
  END LOOP;
END; $$;

Но я действительно хочу перебрать результат SELECT запроса .

Я продолжаюЭта ошибка:

Ошибка в запросе: ОШИБКА: переменная цикла цикла над строками должна быть переменной записи или строки или списком скалярных переменных

Звучит довольно туманномне и поиск в Google не помог.

Есть таблица из моих собственных данных, которую я хочу использовать (я надеялся использовать SELECT * FROM mytable WHERE ‹whatever›), но я понимаю, что не могу даже получить для цикла для работы с более простыми данными .

Примите это:

-- with a SELECT
DO $$
BEGIN 
RAISE NOTICE 'Get ready to be amazed…';
FOR target IN SELECT * FROM generate_series(1,2) LOOP
    RAISE NOTICE 'hello'
END LOOP;
END; $$

Это также генерирует ошибку, описанную выше.Я хотел бы напечатать простую вещь, чтобы получить представление о синтаксисе цикла, что-то вроде:

привет 1
привет 2

Что яделаешь неправильно?

1 Ответ

1 голос
/ 11 апреля 2019

Итератор должен быть объявлен

DO $$
DECLARE 
    target record;
BEGIN 
    RAISE NOTICE 'Get ready to be amazed…';
    FOR target IN SELECT * FROM generate_series(1,2) LOOP
        RAISE NOTICE 'hello';
    END LOOP;
END; $$;

NOTICE:  Get ready to be amazed…
NOTICE:  hello
NOTICE:  hello
...