#postgresql
#postgresql
Вопрос:
CREATE OR REPLACE FUNCTION alter_fab() RETURNS TRIGGER AS $alter_fab$ BEGIN IF old.i_fabricantes != new.i_fabricantes and EXISTS(SELECT * FROM item as i INNER JOIN VENDA ON(venda.i_vendas = i.i_vendas) WHERE i.i_produtos = NEW.i_produtos) then RAISE EXCEPTION 'Fabricante não pode ser alterado!'; END IF; END; $alter_fab$ LANGUAGE plpgsql;
Спусковой крючок
CREATE TRIGGER alter_fab BEFORE UPDATE ON fabricante FOR EACH ROW EXECUTE PROCEDURE alter_fab();
Кто-нибудь знает, как исправить эту ошибку?
ОШИБКА: запись «новый» не содержит поля «i_produtos» КОНТЕКСТ: инструкция SQL «ВЫБЕРИТЕ старый.i_fabricantes != новый.i_fabricantes и СУЩЕСТВУЕТ(ВЫБЕРИТЕ * ИЗ элемента, когда я ПРИСОЕДИНЮСЬ К VENDA(venda.i_vendas = i.i_vendas), ГДЕ i.i_produtos = НОВЫЙ.i_produtos)»
Комментарии:
1. Это говорит вам о том, что в какой бы таблице ни находился этот триггер, в ней нет
i_produtos
поля или что имя поля либо смешанное, либо в верхнем регистре и должно быть заключено в двойные кавычки. Чтобы получить более точный ответ, вам нужно будет предоставить определение триггера, а также определение таблицы. Добавьте их в качестве обновления к вашему вопросу.2. ок,,, добавляется.
3. Пожалуйста, не используйте изображения для текстовой информации. Скопируйте и вставьте эту информацию в свой вопрос. В любом случае триггер находится в таблице
fabricante
, и у него нетi_produtos
поля, поэтому он не будет доступен вNEW
записи. Вам придется пересмотреть свой запрос, чтобы включить значения, к которым у вас есть доступ. Я думаюi.i_fabricantes = NEW.i_fabricantes
.