2015-01-30 5 views
0

Мне нужна помощь. Я новичок в SQL и все, что я хочу, это триггер для обновления столбца (est), когда я использую INSERT с sex = 'F' в таблице Peop. Является ли это возможным? Моя СУБД - PostgreSQL.Trigger on PostgreSQL

Я пробовал этот код, но не прав. Я получаю этот намек: если вы хотите отменить результаты SELECT, вместо этого используйте PERFORM.

CREATE FUNCTION tEst() RETURNS TRIGGER AS $$ 
    BEGIN 
     SELECT * FROM Peop; 
     IF Peop.est = 'A' AND Peop.sex = 'F' THEN 
     UPDATE Peop SET est = 'B'; 
     END IF; 
     RETURN NULL; 
    END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER myTrigger AFTER INSERT ON Peop 
FOR EACH ROW 
EXECUTE PROCEDURE tEst(); 

INSERT INTO Peop (name, sex) VALUES ('Mary', 'F'); 

По умолчанию est столбца имеет 'A' значения. Спасибо заранее!

ответ

2

Это простая задача, но вы должны использовать триггер строки BEFORE INSERT OR UPDATE. Существует возможность:

  • получить информацию о данных в связанных (вставленных, обновленных, удаленных) строках.
  • изменить данные, которые будут храниться в таблице.

Ваш пример:

CREATE FUNCTION tEst() RETURNS TRIGGER AS $$ 
BEGIN 
    IF NEW.est = 'A' AND NEW.sex = 'F' THEN 
    NEW.est = 'B'; 
    END IF; 
    RETURN NEW; 
END; 

CREATE TRIGGER tEst_trg BEFORE INSERT OR UPDATE ON peop 
FOR EACH ROW EXECUTE PROCEDURE tEst(); 

Вы можете увидеть больше примеров в related plpgsql documentation