当前位置:  数据库>oracle

Oracle 10g中存储过程中使用游标

    来源: 互联网  发布时间:2017-03-27

    本文导语: 实例设计     1. 功能设计    某高校开发的研究生招生系统,要求设计PL/SQL程序对考生的成绩数据进行处理,处理的逻辑是根据每门专业课的最低分数线和总分的最低分数线自动将考生归类为录取考生、调剂考生和落选考生。...

实例设计

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

    --创建数据库表 --graduate
    CREATE TABLE "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
    )
    
    --创建序列
    create sequence my_suquence  --序列名称
    minvalue 0                   --序列最小值
    start with 201112081                 --序列起始值
    maxvalue 999999999                  --序列最大值
    increment by 1               --序列的增长值
    nocache                      --不预先在内存中缓存
    cycle;                       --达到最大值后再重新循环
   
    --插入数据
    insert into graduate values(my_suquence.nextval,'张三丰','硕士','56','56','67','78','79');
    insert into graduate values(my_suquence.nextval,'张无极','硕士','34','56','56','48','79');
    insert into graduate values(my_suquence.nextval,'张翠山','硕士','44','78','76','88','39');
    insert into graduate values(my_suquence.nextval,'赵敏','硕士','67','56','69','73','70');
    insert into graduate values(my_suquence.nextval,'周芷若','硕士','43','56','45','78','67');
    insert into graduate values(my_suquence.nextval,'小昭','硕士','64','66','64','76','79');
   
  --创建数据库表  result 
     CREATE TABLE "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
     )
    
     select * from result;
--创建存储过程
             
      create or replace procedure graduateprocess(
             tempzhangzhi in graduate.zhengzhi%type,--将表里面的类型赋给该变量
             tempyingyu in graduate.yingyu%type,
             tempzhuanye1 in graduate.zhuanye1%type,
             tempzhuanye2 in graduate.zhuanye2%type,
             tempzhuanye3 in graduate.zhuanye3%type,
             temptotalscore in result.totalscore%type)
       as
       --定义graduate为记录型变量,临时存放通过游标从graduate表中提取的记录
         graduaterecord graduate%rowtype;
       --定义graduatetotalscore为数值型变量,统计总分
         graduatetotalscore result.totalscore%type;
        --定义graduateflag 为字符型变量,根据结果放入落选或录取
         graduateflag varchar2(4);
         --定义游标graduatecursor,存放的是所有的graduate数据表中的记录
         cursor graduatecursor is
                select * from graduate;
         --定义异常处理
         errormessage exception;
        
        begin
        --打开游标
             open graduatecursor;
             if graduatecursor%not found then
                --如果没有数据。抛出异常
                raise errormessage;
             end if;
             --如果有数据,将数据循环出来
             loop
                 fetch graduatecursor into graduaterecord;
             --计算总分
             graduatetotalscore:=graduaterecord.zhengzhi+graduaterecord.yingyu+graduaterecord.zhuanye1+graduaterecord.zhuanye2+graduaterecord.zhuanye3;
             --比较判断条件,看是否将数据插入到result数据库中
             if(graduaterecord.yingyu>=tempyingyu and
                graduaterecord.zhengzhi>=tempzhengzhi and
                graduaterecord.zhuanye1>=tempzhuanye1 and
                graduaterecord.zhuanye2>=tempzhuanye2 and
                graduaterecord.zhuanye3>=tempzhuanye3 and
                graduaterecord.totalscore>=temptotalscore )
             then
               graduateflag:='录取'
             else
                graduateflag:='落选'
             --退出if
             end if;
             --退出游标循环
             exit when graduatecursor%notfound;
             --向result数据库中插入数据
             insert into result(BH,xm,lb,yingyu,zhengzhi,zhuanye1,zhuanye2,zhuanye3,totalscore,flag)
             values(graduaterecord.BH,graduaterecord.XM,graduaterecord.LB,graduaterecord.YINGYU,graduaterecord.ZHENGZHI,
             graduaterecord.ZHUANYE1,graduaterecord.ZHUANYE2,graduaterecord.ZHUANYE3,graduatetotalscore,graduateflag);
             end loop;
             --关闭游标
             close graduatecursor;
             commit;--提交结果
             --处理异常
             exception
                when errormessage then
                    dbms_output.put_line('无法打开数据表');
                /*程序执行结束"*/
                end;
       end graduateprocess;--存储过程结束











































































































    
 
 

您可能感兴趣的文章:

  • oracle的最大游标数问题
  • Oracle事务!使用游标提交过程
  • Oracle 数据 使用游标
  • 关于Oracle游标的问题(ORA-01000: maximum open cursors exceeded)
  • jsp访问oracle超出打开游标的最大数是什么原因?急,在线给分。
  • 在Oracle PL/SQL中游标声明中表名动态变化的方法
  • oracle 声明游标(不具备字段)规则应用
  • Oracle存储过程返回游标实例详解
  • oracle 在一个存储过程中调用另一个返回游标的存储过程
  • Oracle 游标使用总结
  • oracle分页存储过程 oracle存储过程实例
  • Oracle自动存储管理支持库 ASMLib
  • Oracle存储过程调试简述
  • oracle的存储过程实例讲解
  • Oracle存储过程如何返回一个结果集&如何获取
  • 关于SHELL调用oracle存储过程出现的一个小问题
  • Oracle利用存储过程造数据
  • oracle数据库中查看系统存储过程的方法
  • 求教:shell 脚本怎么获取ORACLE存储过程的返回值?
  • 帮我看一下程序,java调用oracle数据存储的问题?
  • 谁有oracle存储过程的原代码?谢谢!
  • 关键字: oracle,存储过程,数据库,查询,动态sql包,数组,参传,jdbc 1
  • Linux下用SHELL脚本执行带输入输出参数的ORACLE存储过程并得到结果
  • Oracle ASM自动管理存储管理简介
  • Linux下Oracle RAC一个节点宕机导致共享存储无法挂载的故障排除
  • 实现Oracle数据库的存储过程中拥有“role”权限
  • 对Oracle存储过程的几点认识
  • java/j2ee iis7站长之家
  • Oracle索引存储关系到数据库的运行效率
  • oracle如何恢复被覆盖的存储过程
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • shell调用oracle储存过程,怎么判断储存过程执行结果是否正确
  • oracle sql执行过程(流程图)
  • oracle 10g在红旗桌面版6.2的安装过程
  • redhat 9 下安装 oracle9i 过程中,要求指定java目录,到底是哪一个目录?
  • Oracle建表过程初学
  • Oracle Enterprise Linux安装过程
  • Oracle创建用户权限的过程
  • Linux主机下配置Oracle 10G自动启动过程记
  • java调oracle过程的出了问题,求助!帮忙看看
  • 急!!!linux9下安装oracle9i在configuration Tool过程出现错误,在线等待,解决立即给分!
  • UNIX服务器上使用“kill"命令终止"Oracle”过程
  • Linux下Oracle数据库优化的具体过程
  • 剖析用UNIX的kill命令终止Oracle详细过程
  • 哪位大哥能介绍一下在redhat7.2下安装oracle9i的过程和细节问题,只要有用,小弟另有送分
  • JBUILDER如何执行ORACLE的储存过程
  • 用UNIX的kill命令来终止所有的Oracle过程
  • Oracle过程与函数的区别分析
  • Oracle中如何定时调用存储过程
  • Linux AS 4上升级Oracle 10.2.0.1.0到10.2.0.4.0的过程
  • Oracle Streams存储过程中的一些参数
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3