// 触发器

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 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题的更多相关文章

  1. Oracle数据库——触发器的创建与应用

    一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数 ...

  2. SQL server与Oracle触发器的创建与使用

    SQL Server 1创建触发器 GO BEGIN IF (object_id('WMY', 'tr') is not null) DROP trigger WMY END; GO CREATE T ...

  3. Oracle - java创建Oracle 的触发器

    Oracle - java创建Oracle 的触发器 今天碰到这个问题,遇到点问题,到这来 总结一下解决的办法, 需求,为一个用户当中的表增加一个自动增长列,我还没有学Oracle 的这部分,只是简单 ...

  4. Oracle学习笔记(二)——临时表

    在针对大数据量的多表级联查询或复杂事务处理的时候,引入Oracle临时表是一种不错的策略.因此,在解决实际需求时经常会遇到需要使用存储过程和临时表相互配合的情况.下面就Oracle如何创建临时表以及注 ...

  5. [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)

    本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章   创建一个分组报表 1.     建立数据模型 数据模型用于 ...

  6. kettle利用触发器实现数据同步

    2016年8月17日 一.目的 通过触发器实现数据同步二.思路 1.在数据库需要同步的源表中建立一个insert触发器,当有新数据插入时,会自动将新插入数据的主键记录到临时表temp中.(当然也可以记 ...

  7. [结]Oracle trigger(触发器)摘录

    1.触发器: 是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同 ...

  8. oracle的触发器

    oracle的触发器分为语句级和行级两种类型,在视图上所创建的触发器叫做什么类型的触发器? DML触发器有三类: 1, insert触发器: 2, update触发器: 3, delete触发器: 触 ...

  9. mysql存储过程、函数和触发器的创建 [转]

    http://blog.itpub.net/559237/viewspace-438942/ 今天花了半天时间来研究mysql的存储过程函数和触发器的创建,觉得和oracle的大同小异,只是语法上更艰 ...

随机推荐

  1. Oracle11G登录时提示:ORA-12557: TNS:协议适配器不可加载

    原文 Oracle11G登录时提示:ORA-12557: TNS:协议适配器不可加载 初步分析是ORACLE_HOME设置错误引起的.前几天不小心看到系统环境变量中的其值为空,就手贱的加载了一个ora ...

  2. 【转】C++ 单例模式

    http://blog.csdn.net/hackbuteer1/article/details/7460019 单例的一般实现比较简单,下面是代码和UML图.由于构造函数是私有的,因此无法通过构造函 ...

  3. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  4. git添加标签(转载)

    From:http://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE 打标签 同大多数 VCS 一 ...

  5. ruby1.8到2.1语法改变

    1定义hash的语法改变old_way = {:foo => "bar", :one => 1}new_way = {foo: "bar", one ...

  6. 如何设置BIOS使服务器断电后再来电能自动开机

    不同的主板及CMOS型号相对应的选项会有所不同,但我想应该不会差太多,一般都在[POWER MANAGEMENT SETUP]和[Integrated Peripherals]这两个选项中.下面介绍两 ...

  7. console,和自己定义事件

    console.log这个指令是在浏览器控制台输出日志,用来调试程序 跟alert 类似 但不像alert那样会打断程序.

  8. (medium)LeetCode 240.Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. iOS 播放声音文件

    播放声音可以通过3中方式来完成. 1.AVAudioPlayer 使用简单方便,但只能播放本地音频,不支持流媒体播放. //初始化文件地址 NSBundle *bundle = [NSBundle m ...

  10. [C# 基础知识系列]C#中易混淆的知识点

    一.引言 今天在论坛中看到一位朋友提出这样的一个问题,问题大致(问题的链接为:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4 ...