update college set 录取人数 =v_count where 院校编号 =v_yxbh; commit; end;
说明:该过程按院校进行二志愿投档,游标定义了二志愿报考该院校且录取状态为 0( 未录取 ) 的、按总分从高到低排序的所有考生信息。 v_count 记录录取的人数,初值为一志愿已经录取的人数,每当录取一个考生,则 v_count 加 1 。若 v_count 等于计划招生人数,则结束录取。如果 V_COUNT 小于招生人数,则取游标的下一个考生,判断其分数是否在该院校的最低录取分数线上。如果满足,则标记录取状态为 1 。录取结束后,将录取人数 v_count 回填到院校表。
6 .自动投档程序 autoproc 过程名和参数: autoproc(v_lqzy)
其中, v_lqzy 代表要进行录取的志愿,只能是 1 或 2 , 1 代表一志愿, 2 代表二志愿。 功能:该过程根据选定志愿,循环对所有院校进行投档,即对所有院校循环调用 proc1 或 proc2 。一次完成所有院校的一志愿或二志愿投档。 自动投档程序如下:
SQL> create or replace procedure autoproc(v_lqzy number) as
cursorcollege_cursor is select 院校编号 from college; begin
forcollege_rec in college_cursor loop if(v_lqzy=1) then
proc1(college_rec. 院校编号 ); elsif (v_lqzy=2) then
proc2(college_rec. 院校编号 ); end if;
endloop; end;
说明:定义一个取所有院校编号的游标 COLLEGE_CURSOR ,根据志愿 ( 参数为 1 或 2) ,在游标循环中以取得的院校编号为参数,调用一志愿或二志愿投档过程。 7 .查询考生分数过程 show_score 过程名和参数: show_score (p_bh)
其中, p_bh 代表考生编号。
功能:给出考生的考号,返回考生的高考成绩。 查询考生分数程序如下:
SQL> createor replace procedure show_score(v_bh number) as
v_scorenumber(3); begin
v_score:=get_score(v_bh); ifv_score=-1 then
dbms_output.put_line(' 考生编号错误 !'); else
dbms_output.put_line(get_student_name(v_bh)||' 总分 '||v_score); endif; end;
说明:本过程调用返回考生姓名和分数的函数 get_student_name 和 get_score 。 8 .查询考生录取状态过程 show_result 过程名和参数:
show_result(v_bh)
其中, v_bh 代表考生编号。
功能:给出考生的考号,返回录取院校名称。如果没有录取,则返回 “ 未被录取 ” 。 查询考生录取状态程序如下:
SQL> create or replace procedureshow_result(v_bh number) as
v_lqyxmc varchar2(20); v_xmvarchar2(10); begin
v_xm:=get_student_name(v_bh); ifv_xm=' 无 ' then
dbms_output.put_line(' 考生编号错误 !'); else
select 录取院校名称 into v_lqyxmc from result where 编号 =v_bh; dbms_output.put_line(' 考生 '||v_xm||' 被 '||v_lqyxmc||' 录取 !'); endif; exception when others then
dbms_output.put_line(' 考生 '||v_xm||' 未被录取 !'); end;
说明:查询录取考生视图 result ,如果考生在视图中不存在,则表示未被录取。此过程中调用了前面定义的函数 get_student_name 以获得考生名称。 9 .显示院校录取名册存储过程 student_list 过程名和参数:
student_list(v_yxbh)
其中, v_yxbh 表示院校编号。
功能:指定院校编号,显示按分数排序的统计报表 :
SQL> create or replace procedurestudent_list(v_yxbh number) as
v_sname varchar2(10); v_maxnumber(3); v_minnumber(3); col_rec college%rowtype;
cursorstu_cursor is select * from student where 录取院校 =v_yxbh order by 总分 desc; begin
select * into col_rec from college where 院校编号 =v_yxbh;
dbms_output.put_line(get_college_name(v_yxbh)||' 院校录取统计表 ');
dbms_output.put_line(' 招生人数 '||' 招生人数 '||' 录取人数 : '||col_rec. 录取人数 ||' 录取分数线 : '||col_rec. 录取分数线 );
dbms_output.put_line('-------------------------------');
dbms_output.put_line(' 序号 考生编号 姓名 性别 总分 录取志愿 录取日期 '); forstu_rec in stu_cursor loop ifstu_rec. 性别 =1 then
dbms_output.put_line(rpad(stu_cursor%rowcount,8,'')||rpad(stu_rec. 编号 ,9,' ')||rpad(stu_rec. 姓名 ,9,'')||' 男 '||rpad(stu_rec. 总分 ,9,' ')||rpad(stu_rec. 录取志愿 ,9,' ')||rpad(stu_rec. 录取日期 ,9,' ')); else
dbms_output.put_line(rpad(stu_cursor%rowcount,8,'')||rpad(stu_rec. 编号 ,9,' ')||rpad(stu_rec. 姓名 ,9,' ')||' 女 '||rpad(stu_rec. 总分 ,9,' ')||rpad(stu_rec. 录取志愿 ,9,' ')||rpad(stu_rec. 录取日期 ,9,' ')); endif; endloop;
dbms_output.put_line('-------------------------------');
select max( 总分 ),min( 总分 ) into v_max,v_min from student where 录取院校 =v_yxbh;
dbms_output.put_line(' 最高分 : '||v_max||' 最低分 : '||v_min); end;
说明:把院校编号作为条件,检索出被某个院校录取的考生,并按分数排序。其中,性别显示需要进行转换。过程中,使用了 rpad 函数产生相等的列宽。在列表之后,通过统计查询,显示最高分和最低分。
10 .院校招生情况统计表 college_total 过程名和参数: college_total
功能:按照院校的平均录取分数排序所有院校,统计各院校的最高分数、最低分数,招生人数、录取人数、男生人数、女生人数等信息。 院校招生情况统计程序如下:
SQL> create or replace procedurecollege_total as
v_yxbh number(4); v_avgnumber(4); v_maxnumber(4); v_minnumber(4); v_boynumber(3);