`
sbpya
  • 浏览: 610005 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

oracle存储过程,游标及循环应用实例

阅读更多

最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用jndi远程调用的方式实现了这个同步功能,但总是感觉速度很慢,而且很不稳定,现将其修改成dblink+存储过程方式,特对存储过程及游标做了相应学习,此处主要记录游标及循环的不同使用方法:

 

第一种方式: FOR ... IN .....LOOP....END LOOP

CREATE OR REPLACE PROCEDURE synchronous_material
 IS  
     last_version VARCHAR2(14);  --------此处注意,别忘了长度的定义
     sync_row GZB_EPMS_material%ROWTYPE;    ---用这种方式,此处的sync_row也可不定义
  BEGIN
     SELECT last_SYNCHRONOUS_TIME INTO last_version FROM (SELECT (to_char(SYNCHRONOUS_TIME,'yyyymmddhhmiss')) AS last_SYNCHRONOUS_TIME FROM ... ORDER BY SYNCHRONOUS_TIME DESC) WHERE ROWNUM <= 1;

-----此处本来应该加EXCEPTION WHEN DATA_NOT_FOUND THEN ...;但我的这个业务不会出现找不到数据,所以省略了

IN (     ----此处的sync_row迭代变量可以不用事先在IS中定义
       SELECT ......                                            
     FROM ... WHERE OBJVERSION > last_version AND  OBJVERSION <= to_char(SYSDATE,'yyyymmddhhmiss')
     UNION
     SELECT .....     FROM ....WHERE OBJVERSION > last_version AND  OBJVERSION <= to_char(SYSDATE,'yyyymmddhhmiss')
     ) LOOP
    
       NULL;  ---此处是语句体,省略;
       
     END LOOP;
     RETURN;   
 END synchronous_material;

 

第二种方式:CURSOR

    1,CURSOR + WHILE...LOOP...END LOOP

 

         CREATE OR REPLACE PROCEDURE synchronous_material
         IS  


         last_version VARCHAR2(14); 

         CURSOR cur_sync(begin_objversion VARCHAR2,end_objversion VARCHAR2)
          IS
                   SELECT  .....  FROM ......WHERE OBJVERSION > begin_objversion AND   

            OBJVERSION <= end_objversion
             UNION
             SELECT ....FROM ......WHERE OBJVERSION > begin_objversion AND 

             OBJVERSION <=   end_objversion;    
     

        BEGIN
              SELECT last_SYNCHRONOUS_TIME INTO last_version FROM

              (SELECT (to_char (SYNCHRONOUS_TIME,'yyyymmddhhmiss'))

              AS last_SYNCHRONOUS_TIME FROM ...... ORDER BY SYNCHRONOUS_TIME DESC)

              WHERE ROWNUM <= 1;


        OPEN  cur_sync(last_version,to_char(SYSDATE,'yyyymmddhhmiss')); 
             WHILE cur_sync%FOUND LOOP
                     NULL;
             END LOOP;    
         LOSE cur_sync;
 END synchronous_material;

 

2,CURSOR +FOR 变量名 IN 游标名 LOOP....END LOOP

 

CREATE OR REPLACE PROCEDURE synchronous_material
         IS  


         last_version VARCHAR2(14); 

         CURSOR cur_sync(begin_objversion VARCHAR2,end_objversion VARCHAR2)
          IS
                   SELECT  .....  FROM ......WHERE OBJVERSION > begin_objversion AND   

            OBJVERSION <= end_objversion
             UNION
             SELECT ....FROM ......WHERE OBJVERSION > begin_objversion AND 

             OBJVERSION <=   end_objversion;       
    

sync_row GZB_EPMS_material%ROWTYPE;
 BEGIN
     SELECT last_SYNCHRONOUS_TIME INTO last_version FROM

              (SELECT (to_char (SYNCHRONOUS_TIME,'yyyymmddhhmiss'))

              AS last_SYNCHRONOUS_TIME FROM ...... ORDER BY SYNCHRONOUS_TIME DESC)

              WHERE ROWNUM <= 1;

 

     OPEN  cur_sync(last_version,to_char(SYSDATE,'yyyymmddhhmiss'));  
    
     FOR sync_row IN cur_sync(last_version,to_char(SYSDATE,'yyyymmddhhmiss')) LOOP
      NULL;
     END LOOP;
    CLOSE cur_sync;
 END synchronous_pm_t_material;

分享到:
评论

相关推荐

    oracle 的函数、存储过程、游标、简单实例

    本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...

    Oracle存储过程实例使用显示游标

    在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...

    oracle游标使用及实例

    ### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...

    job 存储过程 视图 游标结合实例

    以上就是Oracle Job、存储过程、视图和游标在实际应用中的基本概念和结合实例,它们共同构成了数据库管理和自动化操作的重要部分。理解并熟练掌握这些工具,能显著提升数据库的管理和维护效率。

    oracle存储过程学习经典(实例)

    这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何创建、执行和管理存储过程。 存储过程在数据库管理中扮演着关键角色,它可以提升系统的性能,通过减少网络流量和提供预编译的...

    oracle存储过程、游标、函数

    **一、Oracle存储过程** 存储过程是预编译的SQL语句集合,它们被存储在数据库中并可以按需调用。存储过程有以下几个优点: 1. **性能提升**:由于存储过程在首次创建时就被编译,因此后续调用时执行速度快。 2. **...

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    oracle的一个简单存储过程实例

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的可重用代码段。在这个“Oracle的一个简单存储过程实例”中,我们可以看到如何在Oracle环境中创建、调用和管理存储...

    存储过程 游标 触发器 Oracle安装

    本文将围绕“存储过程”、“游标”、“触发器”这三个核心概念,以及Oracle的安装流程,进行深入的探讨。 首先,让我们来看看“存储过程”。存储过程是预编译的SQL语句集合,存储在数据库中,可以被多次调用,以...

    oracle 存储过程 案例

    总之,“Oracle存储过程案例”是学习和提升数据库编程能力的宝贵资源,结合36个源码实例,无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的Oracle数据库管理能力。记得动手实践,将理论知识转化为实际...

    Oracle存储过程返回游标实例详解

    Oracle存储过程返回游标是数据库开发中常见的操作,主要用于处理多行数据集合。在Oracle中,游标可以作为存储过程的输出参数,使得调用者能够遍历并处理存储过程执行后的结果集。这里我们将详细讲解两种实现方法:...

    Oracle游标实例.txt

    根据给定的文件信息,我们可以深入探讨Oracle数据库中的游标(Cursor)概念及其在实际编程中的应用。游标是Oracle数据库处理数据集的一种机制,它允许程序员逐行地访问查询结果,而不仅仅是处理整个结果集。这在处理...

    oracle游标优化

    然而,在实际应用过程中,不当的游标使用可能会导致性能问题,因此对游标的优化就显得尤为重要。 #### Oracle游标的基本概念 1. **定义**:在Oracle中,游标是一种服务器端的工作区,用来保存SELECT语句的结果集。...

    oracle存储过程(语法实例).pdf

    Oracle 存储过程是数据库管理中的...通过掌握以上知识,开发者能够更好地设计、创建和管理Oracle存储过程,提升数据库应用的性能和可维护性。理解存储过程的特性和用法,有助于在实际项目中实现高效的数据操作和管理。

    多个ORACLE 游标+SQL 游标 小例子+帮助文档

    本教程将深入介绍Oracle和SQL中的游标概念,以及如何通过实例来理解和应用它们。 首先,我们要明白什么是游标。游标(Cursor)是一个数据库系统组件,它允许我们在查询结果集中移动,一次处理一行数据。这在处理...

    oracle存储过程实例

    通过深入学习和实践"Oracle存储过程实例",初学者不仅能掌握基本的存储过程和游标操作,还能逐渐理解如何在实际项目中应用这些知识,实现更高效、更复杂的数据库操作。对于想要在Oracle数据库管理领域深化技能的人来...

    oracle存储过程学习经典

    ### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...

    oracle存储过程详解-开发技术

    #### 四、Oracle存储过程的常见问题及解决方案 1. **数据表别名不能加 as** - 正确写法:`SELECT a.appname FROM appinfo a;` - 错误写法:`SELECT a.appname FROM appinfo as a;` - 解释:在Oracle中,使用...

Global site tag (gtag.js) - Google Analytics