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. 在Oracle中使用'IS IN'语句调用存储过程
- 3. Oracle:存储过程错误
- 4. 如何解决FROM子句中的这个语法错误?
- 5. Oracle中的存储过程错误
- 6. Oracle中的存储过程错误
- 7. 调用Oracle存储过程
- 8. 如何解决这些FX Composer错误?
- 9. 如何解决这些Qt错误?
- 10. 如何解决在centos7这些错误
- 11. SQL:如何解决这些错误?
- 12. 存储过程中的语法错误
- 13. 如何从sql select语句中调用存储过程或存储函数
- 14. 在oracle存储过程中使用CASE语句
- 15. 如何在oracle的存储过程中使用create table和drop table DDL语句。
- 16. oracle中调用存储过程select
- 17. 错误的调用存储过程
- 18. 调度存储过程“ORACLE”
- 19. 错误编译Oracle存储过程
- 20. 错误时执行Oracle存储过程
- 21. ASP.NET和Oracle存储过程错误
- 22. 企业库调用oracle存储过程ExecuteSprocAccessor错误
- 23. MariaDB存储过程 - 在INSERT语句中获取错误'Missing SELECT'
- 24. MySQL错误#1064,在存储过程中DELETE语句
- 25. 如何解决这个linq语句?
- 26. 存储过程编写的语句错误MySQL的PHP
- 27. 存储过程中的BETWEEN语句
- 28. 在存储过程中的exec语句
- 29. 插入语句中的存储过程
- 30. 选择语句中的存储过程
正在试图通过SID为ID的方法计算总,平均和更新的DB学生 –
PL-0103遇到“=”,而在需要下列( –
在这行是遇到错误?读整个错误信息,这是非常有用的!然后,除了任何错误之外,你为什么要在一个过程中完成所有这些,而不是在普通的SQL UPDATE语句中?更好的是,为什么不保存这些计算,无论是在表本身(作为虚拟列)还是在视图中? – mathguy