夜澜偶作庄周梦 酒后聊为楚客狂

实现已知的理论,这仅仅称为技术,探索未知的领域,才是科学的真谛

原创 PL/SQL 演练

新一篇: WebSphere MQ v6 日志原理

一、功能设计

 开发目标研究生招生系统,要求设计PL/SQL程序对考生的成绩数据进行处理,处理的逻辑是根据每门专业课的最低分数线和总分的最低分数线自动将考生归类为录取考生、调剂考生、落选考生。
 为此设计2个数据表,graduate数据表存放考生成绩,result数据表存放处理结果,PL/SQL程序完成的功能就是将graduate数据表中的数据逐行扫描,根据分数线进行判断,计算各科总分,在result数据表中将标志字段自动添加上“录取”或“落选”。

二、数据表设计

graduate数据表结果如下:

图略
 
result数据表结构如下;

图略
 
1、创建graduate数据表mis_01.sql

create table "SCOTT"."GRADUATE" (
  "BH" NUMBER(10) NOT NULL,
  "XM" VARCHAR2(10) NOT NULL,
  "LB" VARCHAR2(10) NOT NULL,
  "YINGYU" NUMBER(4,1) NOT NULL,
  "ZHENGZHI" NUMBER(4,1) NOT NULL,
  "ZHUANYE1" NUMBER(4,1) NOT NULL,
  "ZHUANYE2" NUMBER(4,1) NOT NULL,
  "ZHUANYE3" NUMBER(4,1) NOT NULL)
TABLESPACE "USERS"

2、创建result数据表mis_02.sql

create table "SCOTT"."RESULT"
(
  "BH" NUMBER(10) NOT NULL,
  "XM" VARCHAR2(10) NOT NULL,
  "LB" VARCHAR2(10) NOT NULL,
  "YINGYU" NUMBER(4,1) NOT NULL,
  "ZHENGZHI" NUMBER(4,1) NOT NULL,
  "ZHUANYE1" NUMBER(4,1) NOT NULL,
  "ZHUANYE2" NUMBER(4,1) NOT NULL,
  "ZHUANYE3" NUMBER(4,1) NOT NULL,
  "TOTALSORE" NUMBER(5,1) NOT NULL,
  "FLAG" VARCHAR2(4) NOT NULL)
TABLESPACE "USERS"

3、录入数据mis_03.sql

insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003080520,'张三丰','硕士',55,56,67,78,89);

insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003060555,'张翠山','硕士',66,78,78,89,92);
   
insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003056066,'张无忌','硕士',76,67,89,90,66);
   
insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003010989,'赵敏','硕士',45,59,74,66,56);

insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003050677,'周芷若','硕士',77,67,72,87,66);
   
insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003869401,'小昭','硕士',56,67,56,64,34);

insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003340987,'阿离','硕士',68,93,64,80,56);

insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003056709,'宋元桥','硕士',90,68,81,61,67);

insert INTO "SCOTT"."GRADUATE"
  ("BH","XM","LB","YINGYU","ZHENGZHI","ZHUANYE1","ZHUANYE2","ZHUANYE3")
    VALUES (2003100894,'殷素素','硕士',69,73,62,70,75);
   
4、程序设计

创建处理过程scott.graduateprocess.sql

create or replace procedure scott.graduateprocess
(
  tempzhengzhi in scott.graduate.zhengzhi%type,
  tempyingyu in scott.graduate.yingyu%type,
  tempzhuanye1 in scott.graduate.zhuanye1%type,
  tempzhuanye2 in scott.graduate.zhuanye2%type,
  tempzhuanye3 in scott.graduate.zhuanye3%type,
  temptotalscore in scott.result.totalscore%type
)as
/* 定义graduaterecord为记录型变量,临时存放通过游标从graduate表中提取的记录*/
 graduaterecord scott.graduate%rowtype;
 /* 定义graduatetotalscore为数值型变量,统计总分 */
 graduatetotalscore scott.result.totalscore%type;
 /* 定义graduateflag为字符变量,根据结果放入落选或录取,然后写入数据表result */
 graduateflag varchar2(4);
 /*定义游标*/
 cursor graduatecursor is
  select * from scott.graduate;
  errormessage exception;
  begin
    open graduatecursor;
    if graduatecursor%notfound then
      raise errormessage;
    end if;
    loop
      fetch graduatecursor into graduaterecord;
      graduatetotalscore:=graduaterecord.yingyu + graduaterecord.zhengzhi + graduaterecord.zhuanye1 + graduaterecord.zhuanye2 + graduaterecord.zhuanye3;
      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;
      insert into
        scott.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;

5、主程序设置

主程序mainprcess调用名为graduateprocess的国车公来完成处理,代码设计如下

set serveroutput on
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;
    scott.graduateprocess(score1,score2,score3,score4,score5,scoretotal);
end;


6、采用执行主程序即可完成结果,可以在数据结果表中查看程序执行结果。

 

发表于 @ 2007年12月14日 21:08:00|评论(loading...)|编辑

旧一篇: IBM Rational ClearCase权限设置

评论

#zy227 发表于2007-12-19 16:07:38  IP: 60.21.122.*
研究中 受益匪浅啊
#darling_girl 发表于2008-01-01 21:41:27  IP: 125.71.137.*
因为我是初学者啊,所以还有待研究啊
#会砦的高才生 发表于2008-01-15 16:09:29  IP: 218.20.13.*
有进步。。。
#yuxingye 发表于2008-01-23 16:38:11  IP: 219.149.11.*
还可以了。。。
#selboo 发表于2008-02-03 00:51:19  IP: 222.223.125.*
不知道如何入门
#xcg1985 发表于2008-03-05 16:41:11  IP: 59.37.5.*
丢下SQL语句好久了,最近要用到SQL所以重温一下,又让我学到东西了!!!!
#youngtree202 发表于2008-03-26 12:36:53  IP: 202.107.201.*
学习了关于空值处理的问题
#jsviking 发表于2008-03-31 13:15:43  IP: 218.90.160.*
有啥亮点么 ?
#fangcaoty 发表于2008-05-10 23:24:33  IP: 123.114.97.*
"set serveroutput on" 是什么意思啊?
#tian_huang 发表于2008-05-12 22:43:57  IP: 219.133.116.*
初学者,虽然只是在从中了解一点,很受益啊
谢谢
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 徐建明