SET serveroutput ON
declare
v_name student.name %type := &a_name;
v_grade NUMBER;
e_stu EXCEPTION;
begin
SELECT sc.grade
INTO v_grade
FROM student,
course,
sc
WHERE student.sno=sc.sno
and sc.cno =course.cno
and cname = 'math'
AND name = v_name;
IF v_grade < 60 THEN
raise e_stu ;
ELSE
dbms_output.put_line(v_name||v_grade);
end if;
EXCEPTION
WHEN e_stu THEN
dbms_output.put_line('此学生需要补考!');
WHEN no_data_found THEN
dbms_output.put_line('查无此学生!');
end;
题目
编写带有异常处理的PL/SQL程序:从键盘上随机输入某个学生的姓名,判断该学生选修“math”的成绩是否及格。(1)如果不及格,触发自定义异常,输出:“此学生需要补考!”;(2)如果及格,则输出成绩。(3)如果该学生不存在,触发系统预定义异常,输出:“查无此学生!”
补全代码:
declare
v_sname student. sname%type:=&a_sname;
v_grade number;
e_stuexception;
begin【补全代码】;
exception【补全代码】;
end;
这个已经是修改n遍的答案了 但是还是报错,我认为原因可能和表里设置的数据类型没有设置好有关系 然后我又去修改了表 但是如图所示还不行
主要有几个问题 :
- 如果没有设置student,sc,course三张表的关联,例如主键外键这样的 对select from有没有影响
- select 语句的 where后面筛选的条件有没有顺序关系
- 为什么前面 几个列名前要加表名, 而后面的name,cname(c=course )却不用
- 为什么grade声明的时候直接跟数据类型 而不是像 course.grade %type
感谢友友们