最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用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 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...
以上就是Oracle Job、存储过程、视图和游标在实际应用中的基本概念和结合实例,它们共同构成了数据库管理和自动化操作的重要部分。理解并熟练掌握这些工具,能显著提升数据库的管理和维护效率。
这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何创建、执行和管理存储过程。 存储过程在数据库管理中扮演着关键角色,它可以提升系统的性能,通过减少网络流量和提供预编译的...
**一、Oracle存储过程** 存储过程是预编译的SQL语句集合,它们被存储在数据库中并可以按需调用。存储过程有以下几个优点: 1. **性能提升**:由于存储过程在首次创建时就被编译,因此后续调用时执行速度快。 2. **...
在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的可重用代码段。在这个“Oracle的一个简单存储过程实例”中,我们可以看到如何在Oracle环境中创建、调用和管理存储...
本文将围绕“存储过程”、“游标”、“触发器”这三个核心概念,以及Oracle的安装流程,进行深入的探讨。 首先,让我们来看看“存储过程”。存储过程是预编译的SQL语句集合,存储在数据库中,可以被多次调用,以...
总之,“Oracle存储过程案例”是学习和提升数据库编程能力的宝贵资源,结合36个源码实例,无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的Oracle数据库管理能力。记得动手实践,将理论知识转化为实际...
Oracle存储过程返回游标是数据库开发中常见的操作,主要用于处理多行数据集合。在Oracle中,游标可以作为存储过程的输出参数,使得调用者能够遍历并处理存储过程执行后的结果集。这里我们将详细讲解两种实现方法:...
根据给定的文件信息,我们可以深入探讨Oracle数据库中的游标(Cursor)概念及其在实际编程中的应用。游标是Oracle数据库处理数据集的一种机制,它允许程序员逐行地访问查询结果,而不仅仅是处理整个结果集。这在处理...
然而,在实际应用过程中,不当的游标使用可能会导致性能问题,因此对游标的优化就显得尤为重要。 #### Oracle游标的基本概念 1. **定义**:在Oracle中,游标是一种服务器端的工作区,用来保存SELECT语句的结果集。...
Oracle 存储过程是数据库管理中的...通过掌握以上知识,开发者能够更好地设计、创建和管理Oracle存储过程,提升数据库应用的性能和可维护性。理解存储过程的特性和用法,有助于在实际项目中实现高效的数据操作和管理。
本教程将深入介绍Oracle和SQL中的游标概念,以及如何通过实例来理解和应用它们。 首先,我们要明白什么是游标。游标(Cursor)是一个数据库系统组件,它允许我们在查询结果集中移动,一次处理一行数据。这在处理...
通过深入学习和实践"Oracle存储过程实例",初学者不仅能掌握基本的存储过程和游标操作,还能逐渐理解如何在实际项目中应用这些知识,实现更高效、更复杂的数据库操作。对于想要在Oracle数据库管理领域深化技能的人来...
### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...
#### 四、Oracle存储过程的常见问题及解决方案 1. **数据表别名不能加 as** - 正确写法:`SELECT a.appname FROM appinfo a;` - 错误写法:`SELECT a.appname FROM appinfo as a;` - 解释:在Oracle中,使用...