`
猪↘專屬|华
  • 浏览: 164038 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle10g中存储过程中使用游标

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;--存储过程结束

        
    
    

0
1
分享到:
评论

相关推荐

    oracle存储过程使用游标对多表操作例子

    本文将深入探讨如何在Oracle存储过程中使用游标进行多表操作,具体通过一个示例来展示这一过程。 ### 标题与描述分析 标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,...

    oracle存储过程游标

    ### Oracle 存储过程与游标使用详解 在Oracle数据库管理中,存储过程与游标是两个非常重要的概念。它们可以提高数据处理的效率、增强应用程序的灵活性,并且能够简化复杂的数据库操作。本文将根据提供的内容,深入...

    oracle10g 函数返回游标类型

    在Oracle 10g数据库系统中,开发人员可以利用PL/SQL语言来创建复杂的存储过程、函数以及包,以执行数据库操作。其中,一个重要的功能是能够创建返回游标类型的函数,这种函数允许用户从数据库中检索并返回一组记录,...

    oracle10g存储过程语法

    Oracle 10g 存储过程是数据库管理系统中用于封装一组数据库操作的程序单元,它可以接受输入参数,返回输出结果,并且可以包含复杂的逻辑控制结构。存储过程在数据库应用中扮演着重要的角色,它们能够提高性能,减少...

    oracle10G和oracle11G的OCI.dll

    6. 安全性增强:Oracle 11G在安全性方面做了大量改进,包括增强了身份验证机制、加密功能以及审计策略,oci.dll在其中起到了关键作用,确保了数据在传输和存储过程中的安全性。 总结来说,oci.dll是Oracle数据库与...

    Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

    Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据 Oracle 中的游标数据读取是数据库开发中非常常见的操作。通常,我们使用 fetch some_cursor into var1, var2 形式来获取游标数据,当游标中的记录数...

    ORACLE 10G OCP 题库

    Oracle 10g OCP(Oracle Certified Professional)是Oracle公司为数据库管理员提供的专业认证,它证明了持证者在管理Oracle 10g数据库系统方面具备高级技能和知识。这个题库是准备Oracle 10g OCP考试的重要资源,...

    Oracle10g技术文档

    8. **PL/SQL和数据库开发**:Oracle10g加强了PL/SQL语言的功能,包括异常处理、游标和包的使用。理解PL/SQL语法和最佳实践对于开发高效数据库应用非常重要。 9. **备份与恢复**:Oracle10g的备份和恢复策略包括传统...

    oracle 10g 官方教材

    Oracle 10g是Oracle公司推出的数据库管理系统的一个重要版本,其全称为Oracle Database 10g,主要在2003年至2013年间广泛使用。本教材为官方提供的英文版,旨在深入讲解该系统的各个方面,帮助学习者掌握Oracle 10g...

    oracle10g大学(mmc学院)考试复习资料

    在Oracle 10g中,数据库由多个实体组成,如表、视图、索引、存储过程等。理解这些基本元素以及它们之间的关系是学习Oracle的第一步。 其次,深入学习Oracle 10g的安装与配置。安装过程中包括选择合适的安装类型(如...

    groovy将JDBC中oracle存储过程游标转换为多层json

    ### Groovy将JDBC中Oracle存储过程游标转换为多层JSON 在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并...

    Oracle 10G的使用教程

    Oracle 10G是Oracle公司推出的数据库管理系统的一个版本,它提供了强大的数据存储、管理和处理功能。这个使用教程主要涵盖了三个核心领域:PLSQL编程、备份与恢复以及系统管理。让我们逐一深入探讨这些知识点。 ...

    oracle 10g OCP试题

    Oracle 10g引入了许多新特性,如Real Application Clusters (RAC)用于提供高可用性和负载均衡,Data Guard用于灾难恢复,以及Automatic Storage Management (ASM)简化存储管理。还可能包含对PL/SQL的改进,如游标...

    oracle 10g jar ojdbc14.jar

    8. **存储过程调用**:支持调用Oracle数据库中的存储过程,使用`CallableStatement`对象。 9. **性能优化**:通过设置连接属性,如`prepareCall`和`prepareStatement`的缓存,可以提高性能。 10. **连接池管理**:...

    Oracle11g中文文档

    Oracle11g是一款由甲骨文公司开发的关系型数据库管理系统,是Oracle数据库产品线中的一个重要版本。本套中文文档全面涵盖了Oracle11g的各项特性和功能,为学习和使用Oracle11g数据库提供了详实的参考资料。以下是...

    精通Oracle 10g PLSQL编程

    在Oracle 10g版本中,PLSQL提供了许多增强功能,包括性能优化、错误处理、并发控制等,使得开发者可以编写更复杂、高性能的数据库应用程序。以下是一些关于Oracle 10g PLSQL编程的重要知识点: 1. **基础语法**:...

    Oracle 10G 参考手册 Oracle SQL Reference pdf

    在Oracle 10G中,SQL被用来创建、修改和查询数据库对象,如表、视图、索引和存储过程。基本的SQL语句包括SELECT(查询数据),INSERT(插入数据),UPDATE(更新数据)和DELETE(删除数据)。 2. **SELECT语句**: ...

    精通Oracle 10g SQL和PL SQL.zip

    8. 游标:在存储过程或函数中使用游标进行逐行处理。 PL/SQL(Procedural Language/SQL)是Oracle数据库特有的编程语言,结合了SQL的查询功能和过程性编程语言的控制结构。通过PL/SQL,开发者可以编写存储过程、...

Global site tag (gtag.js) - Google Analytics