- 真可
-
在你的写法中有几个问题:
1、v_grade 被作为两个用途出现;
2、stu_g表中取出多值,判断时出错;
3、rollback是回退什么
SQL> set serveroutput on
SQL>
SQL> declare
2 v_xh stu_g.xh%type;
3 v_name stu_g.name%type;
4 v_grade stu_g.grade%type;
5 v_scope varchar2(10);
6 cursor c_list is
7 select xh, name, grade into v_xh, v_name, v_grade from stu_g;
8 begin
9 OPEN c_list;
10 LOOP
11 FETCH c_list
12 INTO v_xh, v_name, v_grade;
13 EXIT WHEN c_list%NOTFOUND;
14 if v_grade between 90 and 100 then
15 v_scope := "优秀";
16 elsif v_grade between 80 and 89 then
17 v_scope := "良好";
18 elsif v_grade between 70 and 79 then
19 v_scope := "中等";
20 elsif v_grade between 60 and 69 then
21 v_scope := "及格";
22 else
23 v_scope := "不及格";
24 end if;
25 dbms_output.put_line("学号:" || v_xh || "姓名:" || v_name || "分数:" ||
26 v_scope);
27 end loop;
28 close c_list;end;
29 /
学号:1001姓名:张三分数:优秀
学号:1002姓名:李四分数:良好
学号:1003姓名:王五分数:中等
学号:1004姓名:田七分数:及格
学号:1005姓名:丁八分数:不及格
PL/SQL procedure successfully completed