create or replace procedure updateStudentResult(id int)
as
m1 number(4);
m2 number(4);
m3 number(4);
tot number(4);
avg float;
grd char(1);
begin
select marks1,marks2,marks3 into m1,m2,m3 from students where sid=id;
tot:=m1+m2+m3;
avg:=tot/3;
if(avg>=85.0) then
grd:='A';
elsif(avg>=65.0) then
grd:='B';
elsif(avg>=50.0) then
grd:='C';
else
grd:='D';
end if;
update students set total=tot,average=avg,grade=grd where sid=id;
end;
/
回答
所有程序代碼和初始選擇是不必要的。這就足夠了;
CREATE OR REPLACE PROCEDURE updatestudentresult(id INT) AS
BEGIN
UPDATE students
SET total = mark1+mark2+mark3,
average = (mark1+mark2+mark3)/3,
grd = CASE
WHEN (mark1+mark2+mark3)/3 > 85 THEN 'A'
WHEN (mark1+mark2+mark3)/3 > 65 THEN 'B'
WHEN (mark1+mark2+mark3)/3 > 50 THEN 'C'
ELSE 'D'
END
WHERE sid = id;
END;
哇,相隔12秒。 – unleashed
12秒和一個海洋! – BriteSponge
avg是一個保留字(它是一個函數)。您不能在plsql中將其用作變量名稱。爲您的平均值使用另一個變量名稱。
create or replace procedure updatestudentresult(id int) as
m1 number(4);
m2 number(4);
m3 number(4);
tot number(4);
l_avg float;
grd char(1);
begin
select marks1
,marks2
,marks3
into m1
,m2
,m3
from students
where sid = id;
tot := m1 + m2 + m3;
l_avg := tot/3;
if l_avg > 85.0
then
grd := 'A';
elsif (l_avg >= 65.0)
then
grd := 'B';
elsif (l_avg >= 50.0)
then
grd := 'C';
else
grd := 'D';
end if;
update students
set total = tot
,average = l_avg
,grade = grd
where sid = id;
end;
l_avg> 85.0這是一個正確的語法或(l_avg> = 65.0)哪一個? –
應該是> =如你的例子,你可以用()或不用寫它 – Rene
------ >>>>>>> THANKU so much { Rene –
僅僅因爲你可以在pl/sql中做到這一點,這可能會更好的更新聲明。不要在這裏對數據模型做出判斷,只是使用你所擁有的。
update students
set total = mark1+mark2+mark3,
avg = (mark1+mark2+mark3)/3,
grd = case
WHEN (mark1+mark2+mark3)/3 > 85.0 then 'A'
when (mark1+mark2+mark3)/3 > 65.0 then 'B'
when (mark1+mark2+mark3)/3 > 50.0 then 'C'
else 'D' end
where sid = :sid;
- 1. 請解決Oracle存儲過程錯誤
- 2. 錯誤從Java通過可調用語句調用存儲過程
- 3. 從存儲過程中的select語句調用存儲過程
- 4. 在Oracle中使用'IS IN'語句調用存儲過程
- 5. Oracle:存儲過程錯誤
- 6. 如何解決FROM子句中的這個語法錯誤?
- 7. Oracle中的存儲過程錯誤
- 8. Oracle存儲過程中的錯誤
- 9. Oracle中的存儲過程錯誤
- 10. 如何調用Oracle存儲過程
- 11. 如何解決CASE語句錯誤?
- 12. 調用Oracle存儲過程
- 13. 如何解決這些Qt錯誤?
- 14. 我如何解決這些錯誤?
- 15. 如何解決這些FX Composer錯誤?
- 16. 如何解決這些錯誤
- 17. SQL:如何解決這些錯誤?
- 18. 如何解決在centos7這些錯誤
- 19. 調用存儲過程中的「out」ref_cursor的Oracle存儲過程
- 20. 如何在if語句中調用存儲過程?
- 21. 如何解決這個語義錯誤?
- 22. Oracle:調用包中的存儲過程
- 23. 在單個語句中多次調用存儲過程的錯誤1064
- 24. 存儲圖像和解決這些問題絕對犯錯誤
- 25. 存儲過程中的語法錯誤
- 26. 如何從sql select語句中調用存儲過程或存儲函數
- 27. 如何解決這個「SQL語句忽略」錯誤?
- 28. Oracle存儲過程的錯誤
- 29. 如何SQL Server存儲在存儲過程中的SQL語句
- 30. Oracle存儲過程INOUT參數問題 - 得到了解決 - 錯字錯誤
正在試圖通過SID爲ID的方法計算總,平均和更新的DB學生 –
PL-0103遇到「=」,而在需要下列( –
在這行是遇到錯誤?讀整個錯誤信息,這是非常有用的!然後,除了任何錯誤之外,你爲什麼要在一個過程中完成所有這些,而不是在普通的SQL UPDATE語句中?更好的是,爲什麼不保存這些計算,無論是在表本身(作爲虛擬列)還是在視圖中? – mathguy