我想用PLSQL给我的每个学生加10分。
UPDATE AverageView SET AverageModifier = 10 WHERE COURSE_ID = 'INFO101' AND GROUP_ID = 101 AND SEMESTER = 'SUMER14';因此,当我试图更新视图时,我希望激活此触发器,并且希望使用而不是更新和修改真正的表。就像这样:
CREATE OR REPLACE TRIGGER ChangeAverage
INSTEAD OF UPDATE ON AverageView
FOR EACH ROW
BEGIN
UPDATE INSCRIPTIONS SET grade = (grade + 10) WHERE COURSE_ID = :NEW.COURSE_ID AND GROUP_ID = :NEW.GROUP_ID AND SEMESTER = :NEW.SEMESTER ;
END;
/我添加了一个+10‘手动’,但最终它将只是一个变量。
UPDATE INSCRIPTIONS SET grade = (grade + modifier) ....我认为它不起作用,因为有不止一个等级需要更新,而且我被困在那里了。
当我删除这个分数并设置一个静态值时,它的“某种”工作,但它将所有的学生成绩设置为10。
CREATE OR REPLACE TRIGGER ChangeAverage
INSTEAD OF UPDATE ON AverageView
FOR EACH ROW
BEGIN
UPDATE INSCRIPTIONS SET grade = 10 WHERE COURSE_ID = :NEW.COURSE_ID AND GROUP_ID = :NEW.GROUP_ID AND SEMESTER = :NEW.SEMESTER ;
END;
/我应该使用循环和光标吗?
我的铭文表是这样的:
STUDENT_ID CHAR(12) NOT NULL,
COURSE_ID CHAR(12) NOT NULL,
GROUP_ID INTEGER NOT NULL,
SEMESTER CHAR(12) NOT NULL,
REGISTRATION_DATE DATE NOT NULL,
GRADE INTEGER,我的AverageView是:
CREATE OR REPLACE VIEW AverageView AS
SELECT COURSE_ID, GROUP_ID, SEMESTER, AVG(GRADE) AS Average
FROM Inscriptions
GROUP BY COURSE_ID, GROUP_ID, SEMESTER
/据我所知,这些观点是不能修改的。相反,我修改铭文表。
让我们说我的铭文表是这样的
Student A, INFO101, 101, SUMER14, ramdom_date, 70
Student B, INFO101, 101, SUMER14, ramdom_date, 50我的观点很好:这门课程的平均产出为60。
现在,用我的扳机,我想提高平均水平。
UPDATE AverageView SET AverageModifier = 10 WHERE COURSE_ID = 'INFO101' AND GROUP_ID = 101 AND SEMESTER = 'SUMER14';但据我所知,我不能修改一个视图的内容,所以我想增加10 (目前)在每个级别的表铭文。
所以触发器会产生这样的结果:
Student A, INFO101, 101, SUMER14, ramdom_date, 80
Student B, INFO101, 101, SUMER14, ramdom_date, 60诚挚的问候
发布于 2013-11-24 05:48:41
试一试
CREATE OR REPLACE TRIGGER ChangeAverage
INSTEAD OF UPDATE ON AverageView
FOR EACH ROW
BEGIN
UPDATE INSCRIPTIONS SET grade = (:old.grade + 10) WHERE COURSE_ID = :NEW.COURSE_ID AND GROUP_ID = :NEW.GROUP_ID AND SEMESTER = :NEW.SEMESTER ;
END;
/发布于 2013-11-25 23:43:12
结果发现,我有一个没有被更新的约束,并且阻止我在某些参数范围内进行更新。我想我们可以删除这个问题!
https://stackoverflow.com/questions/20165576
复制相似问题