`
lorry1113
  • 浏览: 256443 次
  • 性别: 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存储过程实例使用显示游标

    存储过程调用 Function 并使用 游标循环得到每一条数据然后更新本条数据。初学代码写的不是很好,希望能给初学存储过程的兄弟们提供一点借鉴哦。

    Oracle数据库存储过程技术文档.doc

    第一章 oracle存储过程概述 2 1.1 存储过程基本结构(PROCEDURE) 3 1.1.1创建存储过程 3 1.1.2 存储过程删除 5 1.1.3 调用存储过程 5 1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包...

    oracle存储过程语法

    oracle数据库存储过程相关知识简介,存储过程创建语法讲解,包括判断语句、循环、数组遍历、游标使用,后附实例

    Oracle出现超出打开游标最大数的解决方法

    本文实例讲述了Oracle出现超出打开游标最大数的解决方法。分享给大家供大家参考,具体如下: Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。...

    sql总结.doc

    缺点:滥用触发器会造成数据库及应用程序的维护困难。 (5)触发器的两种形式(行级触发器,表级触发器) 1.在语法上,行级触发器就多了一句话:for each row 2.在表现上,行级触发器,在每一行的数据进行操作的...

    Oracle从基础到熟练(太实用了)

    ①:存储过程 ②:函数 ③:自主事务处理 ④:包规范|包主体 十一.触发器|内置包 ①:触发器类型 ②:触发器原理 ③:new和old 两个行类型变量 ④:递归 ⑤:内置包 十二.导入导出 ①:导入导出/整个DB/表空间/表/...

    Oracle Database 11g初学者指南--详细书签版

    5.7 如何创建存储过程以及创建存储过程的原因 146 5.8 函数的创建和使用 149 5.9 调用PL/SQL程序 151 5.10 本章测验 152 第6章 数据库管理员 153 6.1 了解DBA的工作 154 6.2 执行日常操作 154 6.2.1 体系结构...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    5.7 如何创建存储过程以及创建存储过程的原因 5.8 函数的创建和使用 5.9 调用PL/SQL程序 5.10 本章 测验 第6章 数据库管理员 6.1 了解DBA的工作 6.2 执行日常操作 6.2.1 体系结构和设计 6.2.2 容量规划 6.2.3 备份...

    精通SQL 结构化查询语言详解

    15.5.2 Oracle中存储过程和函数的管理 第16章 SQL触发器  16.1 触发器的基本概念  16.1.1 触发器简介  16.1.2 触发器执行环境 16.2 SQL Server中的触发器  16.2.1 SQL Server触发器的种类  16.2.2 ...

    非常全的oracle文档

    目录 Oracle教程 1 一、 为什么要学习Oracle 8 二、 Oracle公司 8 三、 Oracle安装、启动及缷载 9 3.1. 安装 9 3.2. Oracle的卸载、删除 9 ...25.2. 存储过程 229 25.3. 函数 236 25.4. 程序包 240 25.5. 触发器 243

    Oracle 10g 开发与管理

    Oracle数据库的应用系统结构 11 七. 补充资料——oracle安装时出现的问题 12 第二讲 Oacle数据库体系结构 14 一. 物理存储结构——(数据库载体) 14 1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 ...

    精通SQL--结构化查询语言详解

    15.5.2 oracle中存储过程和函数的管理 324 第16章 sql触发器 325 16.1 触发器的基本概念 325 16.1.1 触发器简介 325 16.1.2 触发器执行环境 325 16.2 sql server中的触发器 326 16.2.1 sql server触发器的种类...

    SQL应用开发范例宝典:SQL应用开发范例宝典.iso (源码光盘)

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    SQL_SERVER应用与开发范例宝典_12357672.part3

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    oracle数据库经典题目

    1.在全局存储区SGA中,哪部分内存区域是循环使用的?( B ) A.数据缓冲区 B.日志缓冲区 C. 共享池 D.大池 2.如果一个服务器进程非正常终止,Oracle系统将使用下列哪一个进程来释放它所占用的资源?( D ) ...

    SQL_SERVER应用与开发范例宝典_12357672.part2

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    SQL_SERVER应用与开发范例宝典_12357672.part1

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    PL/SQL 基础.doc

    1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和数据库打交道的方法,和Pro*C很相似,更底层,很少用 只适合ORACLE; 4) SQLJ: 很新的一种用...

    Oracle数据库实验操作

    实验41:编写存储过程 83 实验42:编写包package 85 第三部分数据库的体系结构 88 实例的维护 88 实验43:数据库的最高帐号sys的操作系统认证模式 90 实验44:数据库的最高帐号sys的密码文件认证模式 92 实验45:...

    OraclePLSQL编程经典例子

    通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql中可以使用create procedure命令来创建过程。 编写一个存储过程,可以输入雇员名和新工资来...

Global site tag (gtag.js) - Google Analytics