2013-11-23 41 views
0

我想用PLSQL爲每個學生成績添加10分。使用PLSQL將相同的值添加到列中的每個元素

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 

問候

+0

你的表的結構'INSCRIPTIONS',查看'AverageView'和一些示例數據將是有用的幫助你。 –

+0

我更新了問題,我添加了更多的細節。 – metraon

回答

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

事實證明,我有哪個沒有更新的約束,並讓我從在某些參數內更新。我想我們可以刪除這個問題!

相關問題