Oracle一个简单的存储过程
/*定义过程参数*/ create or replace procedure snowlucky.graduateprocess( tempzhengzhi in snowlucky.graduate.zhengzhi%type, tempyingyu in snowlucky.graduate.yingyu%type, tempzhuanye1 in snowlucky.graduate.zhuanye1%type, tempzhuanye2 in snowlucky.graduate.zhuanye2%type, tempzhuanye3 in snowlucky.graduate.zhuanye3%type, temptotalscore in snowlucky.result.totalscore%type) as /*定义graduaterecord为记录型变量,临时存放通过游标从graduate数据表中提取的记录*/ graduaterecord snowlucky.graduate%rowtype; /*定义graduatetotalscore为数值型变量,统计总分*/ graduatetotalscore snowlucky.result.totalscore%type; /*定义graduateflag为字符型变量,根据结果放入“落选”或“录取”,然后写入数据表result*/ graduateflag varchar2(4); /*定义游标graduatecursor,存放的是所有的graduate数据表中的记录*/ cursor graduatecursor is select * from snowlucky.graduate; /*定义异常处理errormessage*/ errormessage exception; /*开始执行*/ begin /*打开游标*/ open graduatecursor; /*如果游标没有数据,激活异常处理*/ if graduatecursor%notfound then raise errormessage; end if; /*游标有数据,指针指向第一条记录,每执行fetch命令,就自动下移,循环执行到记录提取完毕为止*/ loop fetch graduatecursor into graduaterecord; /*计算总分*/ graduatetotalscore:=graduaterecord.yingyu+graduaterecord.zhengzhi+graduaterecord.zhuanye1+graduaterecord.zhuanye2+graduaterecord.zhuanye3; /*判断单科和总分是否满足录取要求,若满足,graduateflag变量值为“录取”,否则为“落选”*/ if (graduaterecord.yingyu>=tempyingyu and graduaterecord.zhengzhi>=tempzhengzhi and graduaterecord.zhuanye1>=tempzhuanye1 and graduaterecord.zhuanye2>=tempzhuanye2 and graduaterecord.zhuanye3>=tempzhuanye3 and graduatetotalscore>=temptotalscore) then graduateflag:='录取'; else graduateflag:='落选'; end if; /*当游标数据提取完毕后,退出循环”*/ exit when graduatecursor%notfound; /*向结果数据表result中插入处理后的数据*/ insert into snowlucky.result(bh,xm,lb,zhengzhi,yingyu,zhuanye1,zhuanye2,zhuanye3,totalscore,flag) values(graduaterecord.bh,graduaterecord.xm,graduaterecord.lb,graduaterecord.zhengzhi,graduaterecord.yingyu,graduaterecord.zhuanye1,graduaterecord.zhuanye2,graduaterecord.zhuanye3,graduatetotalscore,graduateflag); end loop; /*关闭游标*/ close graduatecursor; /*提交结果*/ commit; /*异常处理,提示错误信息*/ exception when errormessage then dbms_output.put_line('无法打开数据表'); /*程序执行结束”*/ end; /*主程序mainprocess设计*/ /*定义6个入口变量,分别对应graduate数据表中的专业课和总分分数线*/ declare score1 number(4,1); score2 number(4,1); score3 number(4,1); score4 number(4,1); score5 number(4,1); scoretotal number(5,1); /*将分数线赋值,在这里修改各值就代表不同的分数线*/ begin score1:=50; score2:=56; score3:=60; score4:=62; score5:=64; scoretotal:=325; /*调用处理过程*/ snowlucky.graduateprocess(score1,score2,score3,score4,score5,scoretotal); end;