--创建存储过程
CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p (--参数IN表示输入参数,OUT表示输入参数,类型可以使用任意Oracle中的合法类型。
is_ym IN CHAR)
AS
--定义变量
vs_msg VARCHAR2 (4000); --错误信息变量
vs_ym_beg CHAR (6); --起始月份
vs_ym_end CHAR (6); --终止月份
vs_ym_sn_beg CHAR (6); --同期起始月份
vs_ym_sn_end CHAR (6); --同期终止月份 --定义游标(简单的说就是一个可以遍历的结果集)
CURSOR cur_1
IS
SELECT area_code,CMCODE,SUM (rmb_amt) / 10000 rmb_amt_sn,SUM (usd_amt) / 10000 usd_amt_sn
FROM BGD_AREA_CM_M_BASE_T
WHERE ym >= vs_ym_sn_beg AND ym <= vs_ym_sn_end
GROUP BY area_code, CMCODE;
BEGIN
--用输入参数给变量赋初值,用到了Oralce的SUBSTR TO_CHAR ADD_MONTHS TO_DATE 等很常用的函数。
vs_ym_beg := SUBSTR (is_ym, 1, 6);
vs_ym_end := SUBSTR (is_ym, 7, 6);
vs_ym_sn_beg :=
TO_CHAR (ADD_MONTHS (TO_DATE (vs_ym_beg, 'yyyymm'), -12), 'yyyymm');
vs_ym_sn_end :=
TO_CHAR (ADD_MONTHS (TO_DATE (vs_ym_end, 'yyyymm'), -12), 'yyyymm'); --先删除表中特定条件的数据。
DELETE FROM xxxxxxxxxxx_T
WHERE ym = is_ym; --然后用内置的DBMS_OUTPUT对象的put_line方法打印出影响的记录行数,其中用到一个系统变量SQL%rowcount
DBMS_OUTPUT.put_line ('del上月记录=' || SQL%ROWCOUNT || '条'); INSERT INTO xxxxxxxxxxx_T (area_code,ym,rmb_amt,usd_amt)
SELECT area_code,is_ym,CMCODE,SUM (rmb_amt) / 10000,SUM (usd_amt) / 10000
FROM BGD_AREA_CM_M_BASE_T
WHERE ym >= vs_ym_beg AND ym <= vs_ym_end
GROUP BY area_code, CMCODE; DBMS_OUTPUT.put_line ('ins当月记录=' || SQL%ROWCOUNT || '条'); --遍历游标处理后更新到表。遍历游标有几种方法,用for语句是其中比较直观的一种。
FOR rec IN cur_1
LOOP
UPDATE xxxxxxxxxxx_T
SET rmb_amt_sn = rec.rmb_amt_sn, usd_amt_sn = rec.usd_amt_sn
WHERE area_code = rec.area_code
AND CMCODE = rec.CMCODE
AND ym = is_ym;
END LOOP; COMMIT;
--错误处理部分。OTHERS表示除了声明外的任意错误。SQLERRM是系统内置变量保存了当前错误的详细信息。
EXCEPTION
WHEN OTHERS
THEN
vs_msg :='ERROR IN xxxxxxxxxxx_p('|| is_ym|| '):'|| SUBSTR (SQLERRM, 1, 500);
ROLLBACK; --把当前错误记录进日志表。
INSERT INTO LOG_INFO (proc_name, error_info, op_date)
VALUES ('xxxxxxxxxxx_p', vs_msg, SYSDATE); COMMIT;
RETURN;
END;
--http://wenwen.soso.com/z/q251328153.htm
--http://wenku.baidu.com/view/4171c179168884868762d66c.html
--http://database.ctocio.com.cn/tips/286/8265286.shtml

oracle游标遍历的更多相关文章

  1. Oracle游标动态赋值

    1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...

  2. Oracle游标的使用示例

    此文是使用Oracle游标的几种方式,for...in会自动打开游标,fetch...into需要手动打开游标,游标类似于一个只会往前移动的指针,每次指向数据集中的一行数据,通过游标可以打开数据集,也 ...

  3. [转载]oracle游标概念讲解

    原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互 ...

  4. ORACLE游标概念讲解

    1,什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制. ②关系数据库中的操作是在完整的行集合上执行的.   由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所 ...

  5. Oracle 游标示例,带异常处理

    Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ F ...

  6. Oracle游标带参数

    Oracle游标是可以带参数的,而SqlServer的游标就不可以了 create or replace procedure a as cursor b(c_id int)is select * fr ...

  7. mysql存储过程之游标遍历数据表

    原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...

  8. Oracle 游标使用(转)

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...

  9. Oracle 游标使用全解(转)

    转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...

随机推荐

  1. <context:property-placeholder>标签实现参数剥离

    <context:property-placeholder>标签提供了一种优雅的外在化参数配置的方式(可以是键值对的形式保存在.properties文件中),不过该标签在spring配置文 ...

  2. vue分环境打包配置不同命令

    1.安装cross-env (cross-env能跨平台地设置及使用环境变量)cnpm/npm  i  cross-env -D 2.新建模板 红色的为相关文件 3.配置各个文件 (1)config下 ...

  3. JavaScript_3_输出

    1. JavaScript通常用于操作HTML元素,可以使用getElementById(id)方法. JavaScript由Web浏览器来执行. 2. document.write()仅仅向文档输出 ...

  4. 洛谷 P2691 逃离

    题目描述 一个n×n栅格是由n行和n列顶点组成的一个无向图,如图所示.用(i,j)表示处于第i行第j列的顶点.除了边界顶点(即满足i=1,i=n,j=1或j=n的顶点(i,j)),栅格中的所有其他顶点 ...

  5. COGS 13. 运输问题4

    ★★☆   输入文件:maxflowd.in   输出文件:maxflowd.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]     一个工厂每天生产若干商品,需运输到 ...

  6. windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案

    存在问题“查看基本网络信息并设置连接”为“未知”.如图所示: 解决步骤 运行services.msc 启动Network List Service 若无法启动,打开其属性,选择“登录”选项卡,将启动类 ...

  7. UVA 11491 Erasing and Winning 奖品的价值 (贪心)

    题意:给你一个n位整数,让你删掉d个数字,剩下的数字要尽量大. 题解:因为最后数字位数是确定的,而且低位数字对答案的贡献是一定不及高位数字的,所以优先选择选最大且最靠左边的数字,但是有一个限制,选完这 ...

  8. [论文理解] Connectionist Text Proposal Network

    Connectionist Text Proposal Network 简介 CTPN是通过VGG16后在特征图上采用3*3窗口进行滑窗,采用与RPN类似的anchor机制,固定width而只预测an ...

  9. HTML5<aside>元素

    HTML5<aside>元素用来定义页面文档中主区域内容之外的内容,但之外的内容是与主区域内容相关的. 实例: <article> <h1>这个页面是我开始用htm ...

  10. 如何解决U盘装系统后磁盘总容量变小?

    我在用Win32_Disk_Imager工具制作U盘系统盘之后,发现U盘大小变为2M,另外的大小没有被分配,解决办法如下. 打开:http://jingyan.baidu.com/article/59 ...