selectcount(*) into r from college where 院校编号 =v_yxbh; if r>0 then
dbms_output.put_line(' 院校 '||'v_yxbh'||' 已经存在 !'); else
insert into collegevalues(v_yxbh,v_yxmc,v_lqfsx,v_zsrs,0); commit;
dbms_output.put_line(' 院校 '||v_yxmc||' 插入成功 !'); endif; exception when others then
dbms_output.put_line(' 院校 '||v_yxmc||' 插入失败 !'); end;
步骤 2 :执行该存储过程:
SQL> execute input_college(1011,' 吉林大学 ',570,6);
说明:如果院校编号已经存在,则提示不能插入。通过存储过程插入考生,可以正确显示插入过程的错误信息。
(2) .插入考生存储过程 input_student 过程名和参数:
input_student(p_ksxm, p_xb, p_zf, p_tytj,p_zy1, p_zy2)
其中, p_ksxm 代表考生姓名, p_xb 代表考生性别, p_zf 代表考生高考分数, p_tytj 代表是否同意调剂, p_zy1 代表考生报考的一志愿院校编号, p_zy2 代表考生报考的二志愿院校编号。
功能:该过程用于输入考生信息。每次执行时插入一个考生,部分字段的内容通过参数传递,没有指定参数的字段取字段的默认值,考生编号取自序列。 ( 3) .投档初始化过程 clearstatus
过程名和参数: clearstatus
功能:该过程用于在每次开始模拟录取前对考生和院校表进行状态初始化。具体功能包括:清空 college 表的录取人数;设置 student 表所有考生的录取状态为 0( 未录取 ) ,录取院校为空,录取志愿为空,录取日期为空,操作人为空。 初始化程序如下:
SQL> create or replace procedureclearstatus as begin
updatecollege set 录取人数 =0;
updatestudent set 录取状态 =0, 录取志愿 =null, 录取院校 =null, 录取日期 =null, 操作人 =null; commit; end;
(4) .一志愿投档存储过程 proc1 过程名和参数: proc1(p_yxbh)
其中,参数 p_yxbh 代表要进行一志愿投挡的院校编号。
功能:该过程完成按照院校的要求对某院校进行一志愿投档录取的过程。投档时要指定院校编号作为参数。
投档过程是:对一志愿报考该院校的、分数在最低录取分数线上的学生,按分数进行排序,根据招生人数取前几名录取。
本次录取的考生要回填状态和录取院校等信息,将考生信息表中录取状态改为录取,并将院校编号和录取志愿号 ( 为 1) 填入考生表。同时将院校信息表中对应的录取人数做相应的修改,将实际录取的人数回填院校表的录取人数字段。
说明:如果录取没有达到招生人数,将由二志愿来补充。该过程一次完成一个院校的投档。要一次完成所有院校的投档,可使用后面的自动投档存储过程。
一志愿投档程序如下:
SQL> create or replace procedureproc1(v_yxbh number) as
v_zsrs number(3); v_lqfsx number(3); v_yxmc varchar2(30); v_count number(3);
cursor stu_cursor is select * from student where 一志愿 =v_yxbh order by 总分 desc; begin
select 招生人数 , 录取分数线 , 院校名称 into v_zsrs,v_lqfsx,v_yxmc from collegewhere 院校编号 =v_yxbh; -- 取院校信息 v_count:=0;
dbms_output.put_line(' 院校名称 :'||v_yxmc||' 一志愿投档开始 '); dbms_output.put_line('-----------------------------'); forstu_rec in stu_cursor loop exit when v_count>=v_zsrs; if(stu_rec. 总分 >=v_lqfsx) then
update student set 录取状态 ='1', 录取志愿 ='1', 录取院校 =v_yxbh, 录取日期 =sysdate, 操作人 =user where 编号 =stu_rec. 编号 ; dbms_output.put_line(' 编号 : '||stu_rec. 编号 ||' 姓名 : '||stu_rec. 姓名 ||' 总分 :'||stu_rec. 总分 ); v_count:=v_count+1;
endif; endloop;
dbms_output.put_line('--------------------------------');
update college set 录取人数 =v_count where 院校编号 =v_yxbh; commit; end;
说明:该过程按院校进行一志愿投档,游标定义了一志愿报考该院校的按总分从高到低排序的所有考生信息。 v_count 记录录取的人数,初值为 0 ,每当录取一个考生,则加 1 。若 v_count 等于计划招生人数,则结束录取。如果 v_count 小于招生人数,则取游标的下一个考生,判断其分数是否在该院校的最低录取分数线之上。如果满足,则标记录取状态为 1 。录取结束后,将录取人数 v_count 回填到院校表。 5 .二志愿投档存储过程 proc2 过程名和参数: proc2(v_yxbh)
其中,参数 v_yxbh 代表要进行二志愿投档的院校编号。
功能:该过程完成按照院校的要求对某院校进行二志愿投档和录取的过程。投档时要指定院校编号作为参数。
过程是:对二志愿报考该院校且还没有录取的 ( 去掉一志愿录取的考生 ) 、分数在最低录取分数线上的学生,按分数进行排序,根据缺额 ( 招生人数去掉录取人数 ) 取前几名录取 . 本次录取的考生要回填状态和录取院校等信息,将考生信息表中录取状态改为录取,并将院校编号、录取志愿号 ( 为 2) 填入考生表。同时将院校信息表中对应的录取人数做相应的修改,将实际录取的人数回填院校表的录取人数字段。
说明:如果没有达到招生人数,将由调剂录取来补充。该过程一次完成一个院校的投档。要一次完成所有院校的投档,可使用后面的自动投档存储过程。 二志愿投档程序如下:
SQL 〉 create or replace procedure proc2(v_yxbhnumber) as
v_zsrsnumber(3);
v_lqfsxnumber(3); v_yxmcvarchar2(30); v_lqrsnumber(3); v_countnumber(3); cursorstu_cursor is
select* from student where 二志愿 =v_yxbh and 录取状态 =0 orderby 总分 desc; begin
select 招生人数 , 录取分数线 , 录取人数 , 院校名称 into v_zsrs, v_lqfsx,v_lqrs,v_yxmc from college where 院校编号 =v_yxbh; v_count:=v_lqrs;
dbms_output.put_line(' 院校名称 '||v_yxmc||' 第二志愿投档开始 '); dbms_output.put_line('-----------------------------'); forstu_rec in stu_cursor loop exit when v_count>=v_zsrs; if(stu_rec. 总分 >=v_lqfsx) then
update student set 录取状态 ='1', 录取志愿 ='2', 录取院校 =v_yxbh, 录取日期 =sysdate, 操作人 =user where 编号 =stu_rec. 编号 ; dbms_output.put_line(' 编号 : '||stu_rec. 编号 ||' 姓名 :'|| stu_rec. 姓名 ||' 总分 :'||stu_rec. 总分 ); v_count:=v_count+1; end if; endloop;
dbms_output.put_line('-----------------------------');