首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向使用PLSQL的列中的每个元素添加相同的值。

向使用PLSQL的列中的每个元素添加相同的值。
EN

Stack Overflow用户
提问于 2013-11-23 17:32:08
回答 2查看 194关注 0票数 0

我想用PLSQL给我的每个学生加10分。

代码语言:javascript
复制
UPDATE AverageView SET AverageModifier = 10 WHERE COURSE_ID = 'INFO101' AND GROUP_ID = 101 AND SEMESTER = 'SUMER14';

因此,当我试图更新视图时,我希望激活此触发器,并且希望使用而不是更新和修改真正的表。就像这样:

代码语言:javascript
复制
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‘手动’,但最终它将只是一个变量。

代码语言:javascript
复制
 UPDATE INSCRIPTIONS SET grade = (grade + modifier) ....

我认为它不起作用,因为有不止一个等级需要更新,而且我被困在那里了。

当我删除这个分数并设置一个静态值时,它的“某种”工作,但它将所有的学生成绩设置为10。

代码语言:javascript
复制
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;
/

我应该使用循环和光标吗?

我的铭文表是这样的:

代码语言:javascript
复制
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是:

代码语言:javascript
复制
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
/

据我所知,这些观点是不能修改的。相反,我修改铭文表。

让我们说我的铭文表是这样的

代码语言:javascript
复制
Student A, INFO101, 101, SUMER14, ramdom_date, 70
Student B, INFO101, 101, SUMER14, ramdom_date, 50

我的观点很好:这门课程的平均产出为60。

现在,用我的扳机,我想提高平均水平。

代码语言:javascript
复制
 UPDATE AverageView SET AverageModifier = 10 WHERE COURSE_ID = 'INFO101' AND GROUP_ID = 101 AND SEMESTER = 'SUMER14';

但据我所知,我不能修改一个视图的内容,所以我想增加10 (目前)在每个级别的表铭文。

所以触发器会产生这样的结果:

代码语言:javascript
复制
Student A, INFO101, 101, SUMER14, ramdom_date, 80
Student B, INFO101, 101, SUMER14, ramdom_date, 60

诚挚的问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-24 05:48:41

试一试

代码语言:javascript
复制
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;
/
票数 2
EN

Stack Overflow用户

发布于 2013-11-25 23:43:12

结果发现,我有一个没有被更新的约束,并且阻止我在某些参数范围内进行更新。我想我们可以删除这个问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20165576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档