Синтаксическая ошибка в выражении Postgres с процедурным кодом

Я пытался сделать базовый для образца цикла. Не могу найти то, что я сделал не так. Можете ли вы помочь, пожалуйста:

BEGIN
    FOR i_ IN 1..100 LOOP
        INSERT INTO "MYSHM".aaa values (i_,i_ + 1 ,i_ + 2,i_ + 3);
    END LOOP;
END

[ОШИБКА] 2.0-2: синтаксическая ошибка, неожиданный символ

1 ответ

Решение

Процедурный код допускается только внутри DO оператор или тело функции.
Используя процедурный язык по умолчанию PL / pgSQL (но есть много других вариантов):

DO
$do$
BEGIN
   FOR i IN 1..100 LOOP
      INSERT INTO "MYSHM".aaa   -- column definition list ?!
      VALUES (i, i + 1, i + 2, i + 3);
   END LOOP;
END
$do$;

Или лучше переписать вашу проблему как основанную на множестве операцию с generate_series():

INSERT INTO "MYSHM".aaa         -- column definition list ?!
SELECT i, i + 1, i + 2, i + 3
FROM   generate_series(1,100) i;
Другие вопросы по тегам