oracle-存储过程实现考生成绩查询-012

 招生系统通过存储过程实现考生成绩查询表

登记考生信息和考试成绩,根据考生成绩和录取分数线判断是否录取,汇总考生信息,考试科目五门单科过线,总分过线的才被录取。

 

1.创建考生信息表

create table stuinfo

(

id int,

name varchar2(10),

en int,

ma int,

zz int,

zy int,

os int

);

 

2.创建查询成绩的表解构

create table sstuinfo as select * from stuinfo where 1=2;

alter table sstuinfo add total int;

alter table sstuinfo add flag varchar2(10);

--alter table sstuinfo modify flag varchar2(20);

//可以改变flag的长度

 

3.创建存储过程

create or replace procedure proc_1(p_en int,p_ma int,p_zz int,p_zy int,p_os int,p_total int)

--输入过线分数

as

cursor mycur is select * from stuinfo;

v_row stuinfo%rowtype;

v_total sstuinfo.total%type;

v_flag sstuinfo.flag%type;

begin

delete from sstuinfo;

--清空下查询成绩表

commit;

open mycur;--打开游标

fetch mycur into v_row;--读取下一行

while (mycur%found) loop

v_total:=v_row.en+v_row.ma+v_row.zz+v_row.zy+v_row.os;

if(v_row.en>=p_en and v_row.ma>=p_ma and v_row.zz>=p_zz and v_row.zy>=p_zy and v_row.os>=p_os)

--比较输入分数线与考生成绩

then

v_flag:='通过';

else

v_flag :='未通过';

end if;

insert into sstuinfo values(v_row.id,v_row.name,v_row.en,v_row.ma,v_row.zz,v_row.zy,v_row.os,v_total,v_flag);

--添加到考生查询成绩表

fetch mycur into v_row;

end loop;

commit;

close mycur;--关闭游标

end;

 

 

 

SQL>

--初始的考生成绩表

SQL> select * from stuinfo;

 

        ID NAME               EN         MA         ZZ         ZY         OS

---------- ---------- ---------- ---------- ---------- ---------- ----------

         1 a1                 54         65         63         85         95

         2 a2                 74         65         83         75         85

 

--没有使用存储过程定义的考生查询成绩表

SQL> select * from sstuinfo;

 

no rows selected

--执行存储过程

SQL> exec proc_1(60,60,60,60,60,345);

 

PL/SQL procedure successfully completed

 

SQL>

SQL> set wrap off

--执行存储过程之后添加成功的结果

SQL> select * from sstuinfo;

 

        ID NAME               EN         ZZ         MA         OS         ZY      TOTAL FLAG

---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------

         1 a1                 54         65         63         85         95        362 未通过

         2 a2                 74         65         83         75         85        382 通过

 

 

 

 

 

 

你可能感兴趣的:(oracle,职场,休闲)