一个简单的Oracle问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 16:56:22
创建存储过程[getDetailByName],通过输入参数学生姓名(如"张三"),筛选出该学生的学号,姓名, 课程号,成绩等基本信息,如果不存在此输入值的学生姓名,则打印信息“不存在此学生”,否则输入该学生的基本信息。并写出在Oracle中如何调用该存储过程
有一个[学生课程]数据库,数据库中包括三个表:
学生表:Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,记为:Student(Sno,Sname,Ssex,Sage,Sdept),Sno 为关键字。
课程表:Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。
成绩表:SG由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,记为: SG(Sno,Cno,Grade) (SNO, CNO) 为关键字。

create or replace procedure getDetailByName
(student_name in student.sname%TYPE) is
v_sno sg.sno%TYPE;
v_cno course.cno%TYPE;
v_grade sg.grade%TYPE;
begin
select s.sno, c.cno, g.grade
into v_sno, v_cno, v_grade
from student s, course c, sg g
where s.sname = student_name
and s.sno = g.sno
and c.cno = g.cno;
dbms_output.put_line('学号'||v_sno||' 姓名'||student_name||' 课程号'||v_cno||' 成绩'||v_grade);
exception
when NO_DATA_FOUND then
dbms_output.put_line('不存在该学生');
end;

执行可用:exec getDetailByName('张三')

该程序已经测试通过!