使用PLSQL为列中的每个元素添加相同的值

时间:2013-11-23 17:32:09

标签: sql oracle plsql

我想用PLSQL为每个学生成绩增加10分。

UPDATE AverageView SET AverageModifier = 10 WHERE COURSE_ID = 'INFO101' AND GROUP_ID = 101 AND SEMESTER = 'SUMER14';

因此,当我尝试更新视图时,我希望激活此触发器,并且我想使用INSTEAD OF UPDATE并修改实际表。像这样:

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

祝你好运

2 个答案:

答案 0 :(得分:2)

尝试

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;
/

答案 1 :(得分:0)

原来我有一个没有更新的约束,并且阻止我在某些参数内更新。我想我们可以删除这个问题!