动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Oracle数据库客户端的安装和配置.
.浅析Oracle和SqlServer存储过程的.
.简单的Oracle存储过程的创建方法.
.oracle的系统和对象权限.
.Oracle数据复制技术有效解决数据.
.Oracle LogMiner终结版.
.ORACLE ERP导数据.
.Transaction的完整性控制,实现仅.
.oracle8i学习笔记.
.如何启动DataGuard的备用数据库.
.[数据库]Oracle中分页查找语句的.
.实例讲解Oracle数据库自带的几个.
.查看本用户下的各种对象的SQL脚本.
.Oracle9i初始化参数中文说明(8).
.在Java中使用Oracle blob.
.Oracles XMLDB Study NOTE (1).
.中关键技术及难点.
.ORACLE备份二(ORACLE BACKUP STR.
.如何从SQLServer到Oracle实现服务.
.CSDN Oracle杂志正式启动.

PL/SQL综合实例

发表日期:2008-2-9 |



 
    本节将在前面学习的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”。
    在【表结构定义区】按照图所示进行设置。
    完成设置后单击PL/SQL综合实例按钮。

(图片较大,请拉动滚动条观看)
    读者也可以在【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”。
    在【表结构定义区】按照图所示进行设置。
    完成设置后单击PL/SQL综合实例按钮。
PL/SQL综合实例
    读者也可以在【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所示。
PL/SQL综合实例
    读者也可以在【SQLPlus Worksheet】中执行下列SQL代码,直接向数据表SCOTT.GRADUATE中录入测试数据。

(图片较大,请拉动滚动条观看)

(图片较大,请拉动滚动条观看)
    【配套程序位置】:第9章\ insertgraduate.sql。

程序设计

    1. 创建处理过程scott.graduateprocess
    在【SQLPlus Worksheet】中执行下列PL/SQL代码,创建处理过程scott.graduateprocess。执行结果如图9.61所示。
PL/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);
    /*定义游标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所示。
PL/SQL综合实例

(图片较大,请拉动滚动条观看)

(图片较大,请拉动滚动条观看)
    【配套程序位置】:第9章\ mainprocess1.sql。
    (2)利用【表数据编辑器】查看scott.result数据表的结果,如图9.63所示。
PL/SQL综合实例
    2. 第二组执行结果
    (1)将mainprocess.sql文件稍做改动,在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.64所示。

(图片较大,请拉动滚动条观看)

(图片较大,请拉动滚动条观看)
    【配套程序位置】:第9章\ mainprocess1.sql。
    (2)利用【表数据编辑器】查看scott.result数据表的结果,如图9.63所示。
PL/SQL综合实例
    2. 第二组执行结果
    (1)将mainprocess.sql文件稍做改动,在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.64所示。


(图片较大,请拉动滚动条观看)

(图片较大,请拉动滚动条观看)
    【配套程序位置】:第9章\ mainprocess2.sql。
PL/SQL综合实例
    (2)利用【表数据编辑器】查看scott.result数据表的结果,如图9.65所示。
PL/SQL综合实例
    综合运用PL/SQL的设计要素,就可以设计出很多复杂的处理程序,这也是DBA的一项重要任务。

上一篇:PL/SQL异常处理 人气:612
下一篇:VB+Oracle 9i如何构建开发和运行的环境 人气:652
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成