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

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

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: синтаксическая ошибка, неожиданный символ


person Calipso    schedule 02.10.2013    source источник
comment
Похожий вопрос сегодня.   -  person Erwin Brandstetter    schedule 03.10.2013


Ответы (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;
person Erwin Brandstetter    schedule 02.10.2013