我如何...制作一个触发器,将元素从表格移动到另一个表格 [英] How do i...make a trigger that moves elements from a table to another one

查看:95
本文介绍了我如何...制作一个触发器,将元素从表格移动到另一个表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好我有一个问题:我正在为某些牌桌做触发。



触发器必须将3个等级(不是F)的学生移动到另一个表叫文凭。



事情是触发器不起作用,我不知道如何解决这个问题。请赐教。



我的尝试:



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:

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();

推荐答案

DECLARE
x INTEGER;
BEGIN
SELECT COUNT(GRADE) INTO x FROM GRADE,学生 WHERE GRADE.STUDENTNUMBER = student.STUDENTNUMBER;
IF (X> = 3 那么
INSERT INTO 文凭(STUDENTNAME,STUDENTNUMBER,CLASS,SECTIONID,MAJOR )
SELECT student.STUDENTNAME,student.STUDENTNUMBER,student.CLASS,student。 SECTIONID,student.MAJOR);
END IF ;
返回 x;
END ;
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 更新 ON GRADE
FOR 每个陈述 EXECUTE PROCEDURE
test();
LANGUAGE plpgsql; CREATE TRIGGER UPDATE_TEST AFTER INSERT OR UPDATE ON GRADE FOR EACH STATEMENT EXECUTE PROCEDURE test();


这篇关于我如何...制作一个触发器,将元素从表格移动到另一个表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆