Есть таблица invest_proektu, которая содержит названия проектов, областьи приминения, объем инвестиций,срок возврата инвестиций, срок реализации инвестиций. А также создана таблица pobeditely, в которую были помещены инвестиционные проекты по конкретной области приминения с миним. показателем: объем инвестиций/срок возврата инвестиций.
Нужно создать триггер, который при внесении изменений или добавлении новой записи в invest_proektu изменит содержимое pobeditely(т.е. пересчитает новый показатель)
Вот что я пыталась сделать:
CREATE FUNCTION Insert_Inv () RETURNS trigger AS $$
BEGIN
delete from Pobeditely;
insert into Pobeditely
(select new.oblast_ispolzovaniya,min(new.obem_investicij__tus_eur/new.srok_vozvrata_investicij_god) from invest_proektu
group by new.oblast_ispolzovaniya);
RETURN new;
END;$$
LANGUAGE 'plpgsql';
CREATE TRIGGER Insert_Inv after insert
ON invest_proektu
FOR EACH ROW
EXECUTE PROCEDURE Insert_Inv();
Но оно всего лишь добавляет новую запись в пустую таблицу Pobeditely, а как сделать с UPDATE???
типа:
CREATE FUNCTION Insert_Inv () RETURNS trigger AS $$
BEGIN
UPDATE Pobeditely set (select new.oblast_ispolzovaniya,min(new.obem_investicij__tus_eur/new.srok_vozvrata_investicij_god) from invest_proektu
group by new.oblast_ispolzovaniya);
RETURN new;
END;$$
LANGUAGE 'plpgsql';
Так а в чём проблема? Почему
Так а в чём проблема? Почему не получается с UPDATE? Что выдаёт? Какие ошибки/проблемы?
Ошибка в том, что я хочу
Ошибка в том, что я хочу изменить поле Показатель, но не получается:
UPDATE Pobeditely set Pokazatel in (select new.oblast_ispolzovaniya,min(new.obem_investicij__tus_eur/new.srok_vozvrata_investicij_god) from invest_proektu
group by new.oblast_ispolzovaniya);
Так не работает. Пишет что ошибка около "in"
ERROR: syntax error at or near "in"
Почему здесь нельзя использовать "in"? И как можно по-другому сделать?
Понятно. Ошибка у вас в
Понятно. Ошибка у вас в запросе, при чём здесь триггер?
Читайте синтаксис UPDATE, благо уже на русском есть:
http://postgresql.ru.net/manual/dml-update.html
Насколько я вижу у вас перед IN должно быть как минимум WHERE, а SET должно заверщаться присваиванием.
OK! Спасибо!
OK! Спасибо!