zoukankan      html  css  js  c++  java
  • Oracle 游标疑问

    procedure1:

     1 CREATE OR REPLACE PROCEDURE UPDATE_AC02_AAE140_WYL(PI_AAB001 IN NUMBER,
     2                                                    PO_FHZ    OUT VARCHAR2,
     3                                                    PO_MSG    OUT VARCHAR2) IS
     4   V_AAZ159 NUMBER(20);
     5   --说明:以养老参保的情况为标准(即ac02为准),添加aae140 = 410,510的险种
     6   --20150919 wyl
     7 
     8 BEGIN
     9   --1 清空 备份表1
    10   DELETE FROM AC02_WYL;
    11   --2 往备份表1里 插入 ac02中险种为110的数据
    12   INSERT INTO AC02_WYL
    13     SELECT *
    14       FROM AC02
    15      WHERE AAB001 = PI_AAB001
    16        AND AAE140 = '110';
    17   --3 以备份表1养老 为 参照,往备份表2中插如110数据,是用来生成 510 险种的
    18   INSERT INTO AC02_WYL_2
    19     SELECT * FROM AC02_WYL WHERE AAE140 = '110';
    20   --4 以备份表2 中的 110为参照,更新为 510险种
    21   UPDATE AC02_WYL_2
    22      SET AAE140 = '510', AAE201 = 0, CAC014 = 201509
    23    WHERE AAB001 = PI_AAB001
    24      AND AAE140 = '110';
    25   --5 以备份表1的养老 为 参照,往备份表2中插如110数据,是用来生成 410 险种的 同步骤3
    26   INSERT INTO AC02_WYL_2
    27     SELECT * FROM AC02_WYL WHERE AAE140 = '110';
    28   --6 以备份表2 中的 110为参照,更新为 410险种  同步骤4
    29   UPDATE AC02_WYL_2
    30      SET AAE140 = '410', AAE201 = 0, CAC014 = 201509
    31    WHERE AAB001 = PI_AAB001
    32      AND AAE140 = '110';
    33   --7循环 ,主要是修改 aaz159,
    34   --调用 procedure UPDATE_AC02_AAE140_WYL_xh
    35   UPDATE_AC02_AAE140_WYL_XH(pi_aab001);
    36 END;

    UPDATE_AC02_AAE140_WYL_XH:

     1 CREATE OR REPLACE PROCEDURE UPDATE_AC02_AAE140_WYL_XH(PI_AAB001 VARCHAR2) IS
     2   V_AAZ159 NUMBER(20);
     3   CURSOR C_AC02_WYL IS
     4     SELECT * FROM AC02_WYL_2 WHERE AAB001 = PI_AAB001;
     5 BEGIN
     6   FOR V_C_AC02_WYL IN C_AC02_WYL LOOP
     7     SELECT SEQ_BXGX_AAZ159.NEXTVAL INTO V_AAZ159 FROM DUAL;
     8     UPDATE AC02_WYL_2 SET AAZ159 = V_AAZ159;
     9   END LOOP;
    10 END;

    最后导入到ac02_wyl_2的数据的aaz159竟然都是同一个值。应该是loop的时候的某个步骤弄错了。

    第二个过程改后就没问题了,改后的如下:

     1 CREATE OR REPLACE PROCEDURE UPDATE_AC02_AAE140_WYL_XH(PI_AAB001 VARCHAR2) IS
     2   V_AAZ159 NUMBER(20);
     3   CURSOR C_AC02_WYL IS
     4     SELECT * FROM AC02_WYL_2 WHERE AAB001 = PI_AAB001;
     5 BEGIN
     6   FOR V_C_AC02_WYL IN C_AC02_WYL LOOP
     7     SELECT SEQ_BXGX_AAZ159.NEXTVAL INTO V_AAZ159 FROM DUAL;
     8     UPDATE AC02_WYL_2
     9        SET AAZ159 = V_AAZ159
    10      WHERE AAZ159 = V_C_AC02_WYL.AAZ159
    11        AND AAB001 = PI_AAB001;
    12   END LOOP;
    13 END;

    之前错误的数据导致aaz159都是用一个号,

    ac02_wyl_2的具体数据如下图:

    附ac02的建表sql:

     1 create table AC02
     2 (
     3   aaz159 NUMBER(20) not null,
     4   bae001 VARCHAR2(14) not null,
     5   aab001 NUMBER(20),
     6   aac001 NUMBER(20) not null,
     7   aae140 VARCHAR2(6) not null,
     8   aac013 VARCHAR2(6),
     9   cac013 VARCHAR2(6),
    10   aaa095 VARCHAR2(6) not null,
    11   aac008 VARCHAR2(6) not null,
    12   aac049 NUMBER(6) not null,
    13   cac014 NUMBER(8),
    14   aae201 NUMBER(4) not null,
    15   aaz099 NUMBER(20),
    16   aac048 NUMBER(6)
    17 )
  • 相关阅读:
    物理课件开发记录之一2013年10月25日
    以as中的泛型数组举一例看帮助手册优化的好处
    flash的显示列表的机制探索一
    组合模式
    actionscript中重写注意事项
    用adobe air写一个金鱼监控程序
    adobe air桌面应用程序在前端显示,类似于暴风的总是在桌面的最上方
    windows7下的cmd命令之powercfg命令,不常用的
    设置默认访问项目的客户端的浏览器版本(IE版本)
    防火墙设置对外开放端口
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4819921.html
Copyright © 2011-2022 走看看