ABC表中转数据逻辑

CREATE OR REPLACE PROCEDURE PROC_TT_TRMS_CAR_TASK
(
    P_BATCH_NUM     IN  NUMBER  DEFAULT 5000,   --处理数据量
    P_COMMIT_NUM    IN  NUMBER  DEFAULT 500     --批次提交数据量
) AS

    V_COUNT         INT DEFAULT 0;  -- 批量提交计数
    V_MID_COUNT     INT DEFAULT 0;  -- 中间表计数

/*
    CREATE DATE:2017-06-18
    CREATE BY:01369076
    DESC  :TT_TRMS_CAR_TASK 批量提取数据,中间表TT_TRMS_CAR_TASK_MID 用于比较 ,下发中转场表TT_TRMS_CAR_TASK_DIST   

*/

BEGIN
    -- 批量提取
    FOR RX IN ( SELECT T.*,ROWID  as rid  FROM tt_trms_car_task T WHERE T.DEAL_FLG = 0 AND ROWNUM <= P_BATCH_NUM )  LOOP

       V_MID_COUNT := 0; -- 初始化MID表记录数

       -- 查询中间表
       SELECT COUNT(*) INTO V_MID_COUNT  FROM tt_trms_car_task_mid M WHERE  M.TASK_ID = RX.TASK_ID AND M.BATCH_CODE = RX.BATCH_CODE AND M.Zone_Code = RX.ZONE_CODE ;
       IF V_MID_COUNT = 0 THEN -- mid表新增记录
         INSERT INTO tt_trms_car_task_mid SELECT * FROM  tt_trms_car_task t WHERE t.TASK_ID = RX.TASK_ID AND t.BATCH_CODE = RX.BATCH_CODE AND t.Zone_Code = RX.ZONE_CODE ;
       ELSE -- 对比版本号,修改
         FOR RM IN (SELECT M.* ,ROWID AS rid FROM tt_trms_car_task_mid M WHERE M.TASK_ID = RX.TASK_ID AND M.BATCH_CODE = RX.BATCH_CODE AND M.Zone_Code = RX.ZONE_CODE AND ROWNUM=1 ) LOOP
             IF RM.ORIGINAL_ID < RX.ORIGINAL_ID THEN
                UPDATE tt_trms_car_task_mid
                SET  ID = v_id,
                     original_id = RX.original_id,
                     send_car_tm = RX.send_car_tm,
                     require_id = RX.require_id,
                     task_id = RX.task_id,
                     position_no = RX.position_no,
                     line_code = RX.line_code,
                     batch_code = RX.batch_code,
                     plan_start_tm = RX.plan_start_tm,
                     zone_code = RX.zone_code,
                     plate_num = RX.plate_num,
                     del_flag = RX.del_flag,
                     send_tm = RX.send_tm,
                     deal_tm = RX.deal_tm,
                     deal_flg = RX.deal_flg,
                     deal_ip = RX.deal_ip,
                     deal_count = RX.deal_count,
                     insert_tm = RX.insert_tm,
                     delive_code = RX.delive_code
               WHERE ID = RM.Id;
             END IF
         END LOOP;

         -- dist表新增记录
         INSERT INTO tt_trms_car_task_dist SELECT * FROM  tt_trms_car_task t WHERE t.TASK_ID = RX.TASK_ID AND t.BATCH_CODE = RX.BATCH_CODE AND t.Zone_Code = RX.ZONE_CODE ;

       END IF;

        --批次提交控制
        V_COUNT:=V_COUNT+1 ;
        IF(MOD(V_COUNT,P_COMMIT_NUM)=0)THEN
            COMMIT;
        END IF;

    END LOOP;
    COMMIT;

EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        PKG_SYS_LOG.ERROR_LOG(NULL,
            ‘PROC_TT_TRMS_CAR_TASK‘,
            SYSDATE,
            SQLCODE,
            SQLERRM,
            DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,NULL
        );
END PROC_TT_TRMS_CAR_TASK;

  

时间: 2024-10-14 21:41:34

ABC表中转数据逻辑的相关文章

vertica从其他表迁移数据到新表(insert into 语句用法实例)

前面一篇开始学习solr的时候,做了个入门的示例http://blog.csdn.net/zjc/article/details/24414271 .虽然可以检索出内容,但总和想象的结果有差异--比如,检索"天龙"两个字,按常规理解,就应该只出来<天龙八部>才对,可是竟然也会把<倚天屠龙记>检出来.后来研究了一下,发现系统是这样处理的:无论是抽索引时还是分析检索词时,都把所有文字按单字拆开.这样,刚好<倚天屠龙记>里包含"天"和&

数据库(表)的逻辑备份与恢复

介绍逻辑备份是指使用工具export 将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被误操作而损坏后使用工具import 利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数据库open 的状态下进行也可在关闭数据库后进行,但是逻辑备份和恢复只能在open 的状态下进行. 导出 导出具体的分为:导出表,导出方案,导出数据库三种方式.导出使用exp 命令来完成的,该命令常用的选项有:userid: 用于指定执行导出操作的用户名,口令,连接字符串tables: 用于指定执行

数据库(表)的逻辑备份与恢复&lt;四&gt;

数据库(表)的逻辑备份与恢复 ? 介绍 逻辑备份是指使用工具 export 将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被误操作而损坏后使用 工具 import 利用备份的文件把数据对象导入到数据库的过程. 物理备份即可在数据库 open 的状态下进行也可在关闭数据库后进行,但是逻辑备份和恢复只能在 open 的状态下进行. ? 导出 导出具体的分为:导出表,导出方案,导出数据库三种方式. 导出使用 exp 命令来完成的,该命令常用的选项有: userid: 用于指定执行导出

Oracle数据逻辑组件

概念: oracle的逻辑结构一般可以分成: 表空间(tablespace).段(segment).区(extent).数据块(data block).oracle由表空间组成,表空间由段组成,段由区组成,区由数据块组成. 分类: 表空间: 1.表空间是数据库中最大的逻辑单位,几个表空间组成了数据库. 2.表空间由一个或多个数据文件在物理上构成,一个数据文件只能属于一个表空间,这里通过数据文件位置的不同形成表空间在多个磁盘的分布.3.根据组成的段类型,表空间分成:数据段表空间.索引段表空间.临时

memcached哈希表操作主要逻辑笔记

以下注释的源代码都在memcached项目的assoc.c文件中 1 /* how many powers of 2's worth of buckets we use */ 2 unsigned int hashpower = HASHPOWER_DEFAULT; /* 哈希表bucket的级别,(1<<hashpower) == bucket的个数 */ 3 4 /* Main hash table. This is where we look except during expansio

解决前台展示的R表出数据太慢的方法

解决前台展示的R表出数据太慢的方法第一种方法1.业务逻辑处理后插入 _bak表 2._bak表 纯插入 R表 最后只剩 _bak表,R表 第二种方法1.业务逻辑处理后插入 dm表 2.dm表 纯插入 tmp表 2.R表 重命名为 _bak表 3.tmp表 重命名为 R表 4._bak表 重命名为 tmp表 最后只剩 dm表 ,tmp表,R表 总结: 重命名可能比插入更快,但包体可能因为重命名后表不存在而报错.如果不报错,第2种方法更快. 原文地址:https://www.cnblogs.com/

Mysql DBA 高级运维学习笔记-删除表中数据

9.11 删除表中数据 命令语法:delete from 表名 where 表达式 实践: (1)删除表student中编号为3的记录 mysql> use zbf Database changed mysql> select * from student; +----+-----------+-----+--------+ | id | name | age | dept | +----+-----------+-----+--------+ | 1 | zbf666| 29 | linux

数据库 -- 单表的数据查询

单表查询的语法及关键字执行的优先级 单表查询语法 select distinct 字段一,字段二,... from 表名 where 条件 group by field having 筛选 order by field limit 限制条数  关键字执行的优先级 1. 找到表: from 2. 拿着where指定的约束条件,去文件 / 表中取出一条条记录 3. 将取出的一条条记录进行分组group by , 如果没有group by ,则整体作为一组 4. 执行select  (distinct

驰骋工作流引擎ccflow-ccbpm工作流引擎sdk表单装载逻辑处理注意事项

cbpm工作流引擎sdk表单装载逻辑处理注意事项 关键字:驰骋工作流引擎 sdk表单 装载接口调用 说明:如果您要采用ccbpm的sdk表单开发,在表单 加载前您需要调用一个接口来获得当前节点的信息,调用这个接口还会处理一些业务逻辑. 调用的接口名称:BP.WF.Dev2Interface.SDK_Page_Init(long workid); 该接口处理的业务与作用:      1. 系统会处理一些业务,设置当前工作已经读取等等.      2. 会判断权限,当前人员是否可以打开当前的工作.