--创建存储过程
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. bjut193E 吃饭时的怪癖

    题目: http://bjutacm.openjudge.cn/lianxi/193E/ 思路: n的所有质因数之和等于phi(n) * n / 2, phi(n)为欧拉函数. 实现: #includ ...

  2. MySQL连表Update修改数据

    设想两张表,如下 table A field id field name table B field id filed my_name 现在希望将表B中的my_name中的内容“拷贝”到表A中对应的n ...

  3. object flash

    <!-- html插入flash --> <object type="application/x-shockwave-flash" width="100 ...

  4. UI设计中蕴涵着系统重要的数据结构与功能设计

    UI设计中蕴涵着系统重要的数据结构与功能设计 UI设计中的用户需求,事件(用例)驱动

  5. Nginx+Keepalived负载均衡+后端LNMP网站集群

    Centos6.4 x86,4台,地址是10.10.10.11-14,vip给的100,目标是在13和14安装nginx+keepalived,11和12安装nginx+mysql+php,做为web ...

  6. 如何在Netweaver SE16里直接查看某数据库行记录

    有的数据库表字段类型为RAWSTRING, 包含的是XML的二进制内容,无法直接在SE16里显示. 如果确实想看其内容,怎么办?在下面SE16页面的命令提示栏输入命令/h, 回车进入调试模式.然后双击 ...

  7. 【vue iview】项目 win10 放在C盘 经常npm install不成功,就是因为 权限问题,把代码目录放到D盘就没事了。

    [vue iview]项目 win10 放在C盘 经常npm install不成功,就是因为 权限问题,把代码目录放到D盘就没事了.

  8. Beta冲刺(周五)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作业要求在哪里 https://edu.cnblo ...

  9. 使用FontDialog组件设置字体

    实现效果: 知识运用: FontDialog组件的Font属性 //获取或设置选定的字体 public Font Font  { get;set; } 实现代码: private void butto ...

  10. MFC多文档无法显示可停靠窗格

    当我们使用MFC多文档创建项目时,我们可停靠窗格关闭之后就无法显示了.即使重新编译项目也无法再次显示它们. 原因:因为MFC多文档把这些设置存储在注册表 “HKEY_CURRENT_USER \ SO ...