Click here to Skip to main content
15,892,537 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello I have a question: I am doing a trigger for some tables.

The trigger has to move the students with 3 grades(not F) to another table called diploma.

The thing is the trigger isn't working and I don't know how to fix this. please enlighten me.

What I have tried:

SQL
CREATE TABLE GRADE
(
   STUDENTNUMBER   INT NOT NULL,
   SECTIONID       INT NOT NULL,
   GRADE           CHAR (1),
   PRIMARY KEY (SECTIONID, STUDENTNUMBER),
   FOREIGN KEY (STUDENTNUMBER) REFERENCES STUDENT
);

CREATE TABLE STUDENT
(
   STUDENTNAME     VARCHAR (30) NOT NULL,
   STUDENTNUMBER   INT NOT NULL,
   CLASS           VARCHAR (30),
   SECTIONID       INT[] NOT NULL,
   MAJOR           VARCHAR (20),
   PRIMARY KEY (STUDENTNUMBER)
);


CREATE FUNCTION test() RETURNS TRIGGER AS $$
DECLARE
  x INTEGER;
BEGIN
	SELECT COUNT(GRADE) INTO x FROM GRADE, student WHERE GRADE.STUDENTNUMBER = student.STUDENTNUMBER;
	IF (X >= 3) THEN
		INSERT INTO diploma (STUDENTNAME,STUDENTNUMBER , CLASS,SECTIONID,MAJOR) values
			(SELECT student.STUDENTNAME, student.STUDENTNUMBER, student.CLASS, student.SECTIONID, student.MAJOR);
  	END IF;
  RETURN x;
END;
$$ LANGUAGE plpgsql;


CREATE TRIGGER UPDATE_TEST
	AFTER INSERT OR UPDATE ON GRADE
	FOR EACH STATEMENT EXECUTE PROCEDURE
	test();
Posted
Updated 2-May-16 6:54am
v2
Comments
CHill60 2-May-16 12:55pm    
What happens when you run the code outside of the function or the function outside of the trigger?
ZurdoDev 3-May-16 7:10am    
I agree with CHill60. First test the test function. If you call it manually, what does it do?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900