Функция цикла PostgreSQL

#postgresql #loops #insert #pg

#postgresql #циклы #вставить #pg

Вопрос:

Я хотел бы создать функцию, которая помещает 100 случайных значений в таблицу.

У меня есть что-то подобное, но я получаю сообщение:

ОШИБКА: синтаксическая ошибка рядом с «end» СТРОКА 16: завершение цикла; Состояние SQL: 42601 Символ: 530

Фрагмент кода с вставкой при вызове вручную работает нормально. Есть идеи?

 do
$do$
declare
     i int;
begin
for  i in 1..100
loop
            Insert into "TS".meetings
                    VALUES(
                            (Select  max("ID") 1 from "TS".meetings)
                           ,(Select public.random_between(1,(Select max(pid) from "TS".persons where departmentid in (1,7,8,9))))
                           ,(Select now() (random()*20)*'1 day'::interval)
                           ,(Select "City" from "TS".city where id = (Select public.random_between(1,(Select max(id) from "TS".city ))))
                           ,(Select public.random_between(1,(Select max(id) from "TS".klienci )))
                    )
end loop;
end;
$do$;
  

Комментарии:

1. Вы пропускаете ; в конце запроса

2. К вашему сведению, вам это не нужно DECLARE i . Смотрите здесь Циклы 42.6.5.5. ДЛЯ (целочисленный вариант) «… Имя переменной автоматически определяется как тип integer и существует только внутри цикла (любое существующее определение имени переменной игнорируется в цикле) … »

3. Нет необходимости в цикле или PL / pgSQL, который вы можете использовать insert into .. select ... from generate_series(1,100)