Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题
// 触发器
create or replace trigger tr_sync_BD_MARBASCLASS
after INSERT or UPDATE
on BD_MARBASCLASS for each row
declare v_cnt integer;
PRAGMA AUTONOMOUS_TRANSACTION; -- 自治事务
begin
/**
* Name : tr_sync_BD_MARBASCLASS
* Desc : 物料分类 增量同步 触发器
* Author : wuyf 11222337@qq.com
* Date : 2014-09-10
*/ case
when inserting then
insert into BD_MARBASCLASS_SYNC (AVERAGECOST, AVERAGEMMAHEAD, AVERAGEPURAHEAD, AVGPRICE, CODE, CREATIONTIME, CREATOR, DATAORIGINFLAG, DEF1, DEF10, DEF2, DEF3, DEF4, DEF5, DEF6, DEF7, DEF8, DEF9, DR, ENABLESTATE, INNERCODE, MODIFIEDTIME, MODIFIER, NAME, NAME2, NAME3, NAME4, NAME5, NAME6, PK_GROUP, PK_MARASSTFRAME, PK_MARBASCLASS, PK_ORG, PK_PARENT, TS
, PARENT_PK, PARENT_CODE, PARENT_NAME
,ITF_CREATE_DATE ,ITF_CRUD,ITF_ISSYNC,ITF_MSG,ITF_SYNC_DATE,ITF_COUNT,ITF_PK)
SELECT :new.AVERAGECOST, :new.AVERAGEMMAHEAD, :new.AVERAGEPURAHEAD, :new.AVGPRICE, :new.CODE, :new.CREATIONTIME, :new.CREATOR, :new.DATAORIGINFLAG, :new.DEF1, :new.DEF10, :new.DEF2, :new.DEF3, :new.DEF4, :new.DEF5, :new.DEF6, :new.DEF7, :new.DEF8, :new.DEF9, :new.DR, :new.ENABLESTATE, :new.INNERCODE, :new.MODIFIEDTIME, :new.MODIFIER, :new.NAME, :new.NAME2, :new.NAME3, :new.NAME4, :new.NAME5, :new.NAME6, :new.PK_GROUP, :new.PK_MARASSTFRAME, :new.PK_MARBASCLASS, :new.PK_ORG, :new.PK_PARENT, :new.TS
, MC.PK_MARBASCLASS AS PARENT_PK, MC.CODE AS PARENT_CODE, MC.NAME AS PARENT_NAME -- 父级 PK,编码,名称
,TO_CHAR( sysdate,'yyyy-MM-dd hh:mm:ss'),'C',0,'',null,0,CAST( sys_guid() AS NVARCHAR2(36))
FROM (
SELECT :new.PK_PARENT AS PK_PARENT
FROM DUAL
) T
LEFT JOIN BD_MARBASCLASS MC -- 物料分类(父级)
ON T.PK_PARENT = MC.PK_MARBASCLASS
;
else
insert into BD_MARBASCLASS_SYNC (AVERAGECOST, AVERAGEMMAHEAD, AVERAGEPURAHEAD, AVGPRICE, CODE, CREATIONTIME, CREATOR, DATAORIGINFLAG, DEF1, DEF10, DEF2, DEF3, DEF4, DEF5, DEF6, DEF7, DEF8, DEF9, DR, ENABLESTATE, INNERCODE, MODIFIEDTIME, MODIFIER, NAME, NAME2, NAME3, NAME4, NAME5, NAME6, PK_GROUP, PK_MARASSTFRAME, PK_MARBASCLASS, PK_ORG, PK_PARENT, TS
, PARENT_PK, PARENT_CODE, PARENT_NAME
,ITF_CREATE_DATE ,ITF_CRUD,ITF_ISSYNC,ITF_MSG,ITF_SYNC_DATE,ITF_COUNT,ITF_PK)
SELECT :new.AVERAGECOST, :new.AVERAGEMMAHEAD, :new.AVERAGEPURAHEAD, :new.AVGPRICE, :new.CODE, :new.CREATIONTIME, :new.CREATOR, :new.DATAORIGINFLAG, :new.DEF1, :new.DEF10, :new.DEF2, :new.DEF3, :new.DEF4, :new.DEF5, :new.DEF6, :new.DEF7, :new.DEF8, :new.DEF9, :new.DR, :new.ENABLESTATE, :new.INNERCODE, :new.MODIFIEDTIME, :new.MODIFIER, :new.NAME, :new.NAME2, :new.NAME3, :new.NAME4, :new.NAME5, :new.NAME6, :new.PK_GROUP, :new.PK_MARASSTFRAME, :new.PK_MARBASCLASS, :new.PK_ORG, :new.PK_PARENT, :new.TS
, MC.PK_MARBASCLASS AS PARENT_PK, MC.CODE AS PARENT_CODE, MC.NAME AS PARENT_NAME -- 父级 PK,编码,名称
,TO_CHAR( sysdate,'yyyy-MM-dd hh:mm:ss'),'U',0,'',null ,0,CAST( sys_guid() AS NVARCHAR2(36))
FROM (
SELECT :new.PK_PARENT AS PK_PARENT
FROM DUAL
) T
LEFT JOIN BD_MARBASCLASS MC -- 物料分类(父级)
ON T.PK_PARENT = MC.PK_MARBASCLASS
;
end case; commit; -- 记得 提交 事务
end;
// 创建临时 同步 中间状态 表 表结构
--判断表是否存在,如果存在则删除
declare
num number;
begin
select count(1) into num from all_tables where TABLE_NAME = 'BD_MARBASCLASS_SYNC' and OWNER='NC';
if num=1 then
execute immediate 'drop table BD_MARBASCLASS_SYNC';
end if;
end; /
/**
* Name : BD_MARBASCLASS_SYNC
* Desc : 物料分类 同步表
* Author : wuyf 11222337@qq.com
* Date : 2014-09-10
*/
create table BD_MARBASCLASS_SYNC as
select t.*
, CAST(NULL AS nvarchar2(19)) AS ITF_CREATE_DATE -- 同步记录创建时间
, CAST('' AS NVARCHAR2(30)) AS ITF_CRUD -- 同步类型 : C:新增,U:更新,D:删除,R:读(一般没有)
, 0 AS ITF_ISSYNC -- 是否已同步: 0:未同步或同步失败, 1:已同步成功
, CAST('' AS NVARCHAR2(2000)) AS ITF_MSG -- 同步消息:
, CAST(NULL AS nvarchar2(19)) AS ITF_SYNC_DATE -- 最后同步时间
, 0 AS ITF_COUNT -- 同步次数
,CAST( sys_guid() AS NVARCHAR2(36)) AS ITF_PK -- 同步主键
from (
SELECT
MC.*
,nvl(MCP.PK_MARBASCLASS,'') AS PARENT_PK -- 父分类PK
,nvl(MCP.CODE,'') AS PARENT_CODE -- 父分类编码
,nvl(MCP.NAME,'') AS PARENT_NAME -- 父分类名称
FROM BD_MARBASCLASS MC
LEFT JOIN BD_MARBASCLASS MCP
ON MC.PK_PARENT = MCP.PK_MARBASCLASS
) t
where 1=0;
Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题的更多相关文章
- Oracle数据库——触发器的创建与应用
一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数 ...
- SQL server与Oracle触发器的创建与使用
SQL Server 1创建触发器 GO BEGIN IF (object_id('WMY', 'tr') is not null) DROP trigger WMY END; GO CREATE T ...
- Oracle - java创建Oracle 的触发器
Oracle - java创建Oracle 的触发器 今天碰到这个问题,遇到点问题,到这来 总结一下解决的办法, 需求,为一个用户当中的表增加一个自动增长列,我还没有学Oracle 的这部分,只是简单 ...
- Oracle学习笔记(二)——临时表
在针对大数据量的多表级联查询或复杂事务处理的时候,引入Oracle临时表是一种不错的策略.因此,在解决实际需求时经常会遇到需要使用存储过程和临时表相互配合的情况.下面就Oracle如何创建临时表以及注 ...
- [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章 创建一个分组报表 1. 建立数据模型 数据模型用于 ...
- kettle利用触发器实现数据同步
2016年8月17日 一.目的 通过触发器实现数据同步二.思路 1.在数据库需要同步的源表中建立一个insert触发器,当有新数据插入时,会自动将新插入数据的主键记录到临时表temp中.(当然也可以记 ...
- [结]Oracle trigger(触发器)摘录
1.触发器: 是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同 ...
- oracle的触发器
oracle的触发器分为语句级和行级两种类型,在视图上所创建的触发器叫做什么类型的触发器? DML触发器有三类: 1, insert触发器: 2, update触发器: 3, delete触发器: 触 ...
- mysql存储过程、函数和触发器的创建 [转]
http://blog.itpub.net/559237/viewspace-438942/ 今天花了半天时间来研究mysql的存储过程函数和触发器的创建,觉得和oracle的大同小异,只是语法上更艰 ...
随机推荐
- [MySQL] 同步一张表、复制过滤设置
一.缘由 据测试要求,需要把线上一张股票信息的表实时同步到测试环境,那么干吧,这次不复制库,单独复制表. 二.解决办法 可以按照同步(复制)库的方法来,在salve端设置 my.cnf,replica ...
- OSTimeDelay(1)
当OS_TICKS_PER_SEC=100HZ ,即每个时钟节拍10ms;如果想延时10ms而调用OSTimeDelay(1)是不行的,调用该函数至少要2个时钟节拍才不会因时间太短,调度跟不上而产生错 ...
- gerrit 配置 apache2 反向代理(转载)
Apache 2 Configuration To run Gerrit behind an Apache server using mod_proxy, enable the necessary A ...
- [ActionScript 3.0] AS3 拖拽混动效果之一
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; impor ...
- 如何正确地使用Python的属性和描述符
关于@property装饰器 在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问. 那么为什么要这样做呢?因为@property让我们将自定义的代码同变量的访问/设定联 ...
- 根据硬件配置后mapred-site.xml和yarn-site.xml
机器总共16G内存,sqoop导入数据时大约需要2G左右 mapred-site.xml <configuration> <property> <name>mapr ...
- java自定义注解注解方法、类、属性等等【转】
http://anole1982.iteye.com/blog/1450421 http://www.open-open.com/doc/view/51fe76de67214563b20b385320 ...
- 【caffe-windows】 caffe-master 之Matlab中model的分类应用
此篇讲述在matlab中,如何将训练好的model用于图像分类.将以mnist为例,主要用到caffe-master\matlab\demo 下的classification_demo.m ,可参考我 ...
- SDUT 2772 数据结构实验之串一:KMP简单应用
数据结构实验之串一:KMP简单应用 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定两个 ...
- 华为OJ平台——查找组成一个偶数最接近的两个素数
import java.util.Scanner; /** * 问题描述:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况, * 本题目要求输出组成指定偶数的两个素数差值最小 ...