通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>数 据 库>>Oracle>>正文 新版上线![旧版]
注:打开慢时请稍等

PL/SQL综合实例

http://www.iyit.net  日期:2006-5-30 11:57:26  来源:网络转载   点击:
参加讨论】PL/SQL综合实例:


 
    本节将在前面学习的PL/SQL基础上分析一个较复杂的实例,以教会读者编写完整的PL/SQL程序的方法。

实例设计

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




创建数据表

    为了简化起见,实例的两个数据表都建立在默认的scott用户下,这样读者可以完全模拟实例一致的环境进行学习。
    1. 创建graduate数据表
    在图9.58所示的创建表的【一般信息】选项卡中按照下列步骤进行配置。
    在【名称】文本框中输入“GRADUATE”。
    在【方案】下拉列表框中选择“SCOTT”。
    在【表空间】下拉列表框中选择“USERS”。
    在【表结构定义区】按照图所示进行设置。
    完成设置后单击按钮。

    读者也可以在【SQLPlus Worksheet】中执行下列SQL代码,直接创建数据表SCOTT.GRADUATE。
    ――――――――――――――――――――――――――――――――――――――
    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"
    ――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ creategraduate.sql
    2. 创建result数据表
    在图9.59所示的创建表的【一般信息】选项卡中按照下列步骤进行配置。
    在【名称】文本框中输入“RESULT”。
    在【方案】下拉列表框中选择“SCOTT”。
    在【表空间】下拉列表框中选择“USERS”。
    在【表结构定义区】按照图所示进行设置。
    完成设置后单击按钮。

    读者也可以在【SQLPlus Worksheet】中执行下列SQL代码,直接创建数据表SCOTT.RESULT。
    ――――――――――――――――――――――――――――――――――――――
    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,
        "TOTALSCORE" NUMBER(5, 1) NOT NULL,
        "FLAG" VARCHAR2(4) NOT NULL)
    TABLESPACE "USERS"
    ――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ createresult.sql

录入数据

    利用【表数据编辑器】向SCOTT.GRADUATE数据表录入下列实验数据。如图9.60所示。

    读者也可以在【SQLPlus Worksheet】中执行下列SQL代码,直接向数据表SCOTT.GRADUATE中录入测试数据。


    【配套程序位置】:第9章\ insertgraduate.sql

程序设计

    1. 创建处理过程scott.graduateprocess
    在【SQLPlus Worksheet】中执行下列PL/SQL代码,创建处理过程scott.graduateprocess。执行结果如图9.61所示。

    ―――――――――――――――――――――――――――――――――――――
    /*定义过程参数*/
    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);
    /*定义游标graduatecursor,存放的是所有的graduate数据表中的记录*/
      cursor graduatecursor is
        select * from scott.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
    scott.result(bh,xm,lb,zhengzhi,yingyu,zhuanye1,zhuanye2,zhuanye3,totalscore,flag)
    values(graduaterecord.bh,graduaterecord.xm,graduaterecord.lb,graduaterecord.zhengzhi,graduate
    record.yingyu,graduaterecord.zhuanye1,graduaterecord.zhuanye2,graduaterecord.zhuanye3,graduat
    etotalscore,graduateflag);
    end loop;
    /*关闭游标*/
    close graduatecursor;
    /*提交结果*/
    commit;
    /*异常处理,提示错误信息*/
    exception
    when errormessage then
        dbms_output.put_line('无法打开数据表');
    /*程序执行结束”*/
    end;
    ―――――――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ creategraduateprocess.sql
    2. 主程序mainprocess设计
    主程序调用名为graduateprocess的过程来完成处理,代码设计如下:
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    /*定义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;
    /*调用处理过程*/
       scott.graduateprocess(score1,score2,score3,score4,score5,scoretotal);
    end;
    ――――――――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章\ mainprocess.sql
    在上述过程设计中,综合使用了异常处理、游标、变量等PL/SQL程序设计要素,通过主程序向带参数执行的过程传递参数。

执行结果

    1.第一组执行结果
    (1)将mainprocess.sql文件稍做改动,在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.62所示。



    【配套程序位置】:第9章\ mainprocess1.sql
    (2)利用【表数据编辑器】查看scott.result数据表的结果,如图9.63所示。

    2. 第二组执行结果
    (1)将mainprocess.sql文件稍做改动,在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.64所示。


    【配套程序位置】:第9章\ mainprocess1.sql
    (2)利用【表数据编辑器】查看scott.result数据表的结果,如图9.63所示。

    2. 第二组执行结果
    (1)将mainprocess.sql文件稍做改动,在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.64所示。


    【配套程序位置】:第9章\ mainprocess2.sql

    (2)利用【表数据编辑器】查看scott.result数据表的结果,如图9.65所示。

    综合运用PL/SQL的设计要素,就可以设计出很多复杂的处理程序,这也是DBA的一项重要任务。


编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:PL/SQL异常处理
下一篇:VB+Oracle 9i如何构建开发和运行的环境
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
MYSQL列类型参考 在Windows上安装MySQL 获得和安装MYSQL软件
安全网络访问mysql数据库服务器 更新MySQL数据库服务 运行多个MYSQL服务器
优化MYSQL服务器 使用MYSQL备份数据恢复 备份和拷贝MYSQL数据库
MYSQL日志文件维护 MYSQL用户帐号管理 MySQL服务器的启动和关闭
新的MySQL安装的安全性 MySQL重定位数据目录的内容 MySQL数据目录的位置
MySQL管理介绍 需要避免的MYSQL客户机程序设计错误 MYSQL图像数据的处理
对MYSQL查询中有疑问的数据进行编码 在MYSQL结果集上执行计算、 客户机程序5—MYSQL交互式查询程序
如何处理MYSQL查询 MYSQL客户机程序3—产生连接代码模块 MYSQL客户机程序2—增加错误检查
最新更新 热点排行 推荐新闻
脱机备份与恢复实战
Oracle 9i的备份和恢复机制
存储管理——深入Oracle 9i核心
如何执行实例程序
研究生管理信息系统的开发流程
MYSQL列类型参考
获得和安装samp_db样例数据库分发包
在Windows上安装MySQL
获得和安装MYSQL软件
安全网络访问mysql数据库服务器
更新MySQL数据库服务
运行多个MYSQL服务器
优化MYSQL服务器
使用MYSQL备份数据恢复
备份和拷贝MYSQL数据库
Oracle 9i锁
为数据库的表自动生成行号--为分页打好
Oracle中关于逻辑备份与恢复
脱机备份与恢复实战
Oracle 9i的备份和恢复机制
优秀公益广告作品欣赏(8)
java数据类型转换
Windows XP专业版IIS连接数的更改
优秀公益广告作品欣赏(7)
QQ最新版下载 2006 beta2 体验新感受 
Office2007简体中文版浮出水面 美图抢
WEB服务器配置全攻略(三)
优秀公益广告作品欣赏(6)
优秀公益广告作品欣赏(4)
优秀公益广告作品欣赏(1)
传统计算机病毒传播能力破坏性在提高
内存为何有“两面性”
AMD水货盒装CPU识别方法
IP地址资源2012年枯竭 部署IPv6很紧迫
古老问题有新解:世上先有鸡蛋后有鸡
Dreamweaver MX 2004从零开始(1)
利用CSS改善网站可访问性
如何让MM的脸通透可人
msn8.0下载
ASP 五大高效提速技巧
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息