Я пишу хранимую процедуру postgres, которая перебирает строки, возвращаемые оператором select. Для каждой просматриваемой строки он вставляет значения из этого оператора select в новую таблицу. Одно из значений, которое мне нужно вставить во вторую таблицу, — это среднее значение столбца. Однако, когда я вызываю хранимую процедуру, я получаю сообщение об ошибке, что временная строка не имеет атрибута фактического столбца, который я усредняю. См. хранимую процедуру и ошибку ниже.
Хранимая процедура:
create or replace procedure sendToDataset(sentence int)
as $$
declare temprow peoplereviews%rowtype;
BEGIN
FOR temprow IN
select rulereviewid, avg(rulereview)
from peoplereviews
where sentenceid = sentence
group by rulereviewid
loop
insert into TrainingDataSet(sentenceId, sentence, ruleCorrectId, ruleCorrect, dateAdded)
values(sentence, getSentenceFromID(sentence), tempRow.rulereviewid, tempRow.avg(rulereview), current_timestamp);
END LOOP;
END
$$
LANGUAGE plpgsql;
Ошибка:
ERROR: column "rulereview" does not exist
LINE 2: ...omID(sentence), tempRow.rulereviewid, tempRow.avg(rulereview...
^
QUERY: insert into TrainingDataSet(sentenceId, sentence, ruleCorrectId, ruleCorrect, dateAdded)
values(sentence, getSentenceFromID(sentence), tempRow.rulereviewid, tempRow.avg(rulereview), current_timestamp)
CONTEXT: PL/pgSQL function sendtodataset(integer) line 11 at SQL statement
SQL state: 42703
По сути, мне интересно, можно ли использовать эту агрегатную функцию в операторе вставки или нет, а если нет, то есть ли другой способ обойти это.
values(getsentenceid(sentence), sentence, ...
- person a_horse_with_no_name   schedule 15.11.2019