2016-07-10 4 views
0

나는 여론 조사에 대한 정보와 각 여론 조사는 그것에서이 질문의 수를 포함하는 설문 조사 테이블간단한 트리거가 잘못된 이유는 무엇입니까?

Poll(id, number_of_questions) 

있습니다. ,

는 질문이 테이블을

Question(id, text) 

이 그리고 나는 성분 표를

Composition(poll, question) 

이 여론 조사 Poll.id를 참조하고 참조 Question.id

당신이 말할 수 질문 이 마지막 표에는 각 설문과 그 질문 사이의 연관성이 포함되어 있습니다.

내가의 내가 ID = 3 및 텍스트를 갖는 새로운 질문을 작성한다고 가정 해 봅시다

CREATE FUNCTION increment() RETURNS TRIGGER AS $$ 
BEGIN 
UPDATE poll SET number_of_questions = number_of_questions + 1 WHERE poll.id = composition.poll; 
RETURN NEW; 
END; 
$$ LANGUAGE 'plpgsql'; 
CREATE TRIGGER incrementQuestionNumber 
AFTER INSERT ON composition FOR EACH ROW 
EXECUTE PROCEDURE increment(); 

그래서 구성에있는 모든 INSERT 후

number_of_questions 

를 증가해야하는 트리거를 만들어 = '어떻게 지내 '?

Question(3, 'How are you') 

는 그럼한다 트리거 삽입 이후 조성물 테이블

Composition(5, 3) 

에 생성되고,이 기록의 결과로, 폴링 조성물 테이블에 인서트 ID = 5를 갖는이 질문 연관 폴링 테이블에 NUMBER_OF_QUESTIONS을 증가 곳 poll.id = 5

현실에서 내가 구성에 삽입을 할 때 그러나, 그것은 (새로운 레코드가 추가되지 않음) 실패하고 난

0을 얻을
ERROR: FROM element in table "composition" is missing 

트리거가 잘못되었습니다.

+0

잘못된 태그, 아니? – Drew

답변

0

트리거에서 구성 테이블을 사용하지 마십시오. 현재 컴포지션의 레코드는 "NEW"변수입니다. 그래서 당신의 트리거 교체 :

 UPDATE poll SET number_of_questions = number_of_questions + 1 WHERE poll.id = composition.poll; 

기준 :

UPDATE poll SET number_of_questions = number_of_questions + 1 WHERE poll.id = NEW.poll; 
+0

아! 그게 내가 놓친거야! 감사합니다. – NoobNe0

관련 문제