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的大同小异,只是语法上更艰 ...
随机推荐
- Spring中IOC和AOP的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...
- MyBatis返回主键
网上给的例子都很简单 , 只要用useGeneratedKey就行了. @Insert({ "INSERT INTO money_record_increasement (id, creat ...
- Maven详解之仓库------本地仓库、远程仓库
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...
- Table View滑动时报错
学习表视图(Table View)的应用时,自己写了个demo,最后表格出来了,可是滑动时报错了,报错如下: 这是我ViewController.m部分的代码: #import "ViewC ...
- Tomcat发布项目时,浏览器地址栏图标的问题
最近在做一个Java网络应用程序,服务器是tomcat.在默认情况下,当用户访问该网络应用时,地址栏图标显示为tomcat猫.我希望把它换成自己的图标,于是研究了一下.在研究过程中,我发现网上的资料大 ...
- Opensturt和Struct区别
1 OpenStruct和Struct区别,Opestruct你需要创建时,直接给属性赋值,而Struct需要先定义属性后 ,再给属性赋值.选择哪个就看你对属性赋值的时机, 2 Struct和Open ...
- CSS设置图片垂直居中的方法
如果是应用了表格,那么设置单元格为align="center"就可以使其中的一切内容居中.如果没有应用表格要想设置图片居中就有点困难了.困难来自不按"常规出牌" ...
- C# String.Format大全 去 decimal 后面的 0
转 http://kwon.iteye.com/blog/1068255 http://blog.csdn.net/tvvbbb/article/details/47256943 public st ...
- Javascript同源策略对context.getImageData的影响
在本机测试HTML5 Canvas程序的时候,如果用context.drawImage()后再用context.getImageData()获取图片像素数据的时候会抛出错:SECURITY_ERR: ...
- ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件 ...