// 触发器

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. 一个超级简单的HTML模板框架源代码以及使用示例

    HTML模板框架源代码 var HtmlTemplate = (function () { function HtmlTemplate(htmlSource) { this.htmlSource = ...

  2. bug_ _ java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法

    ========== 4     如何解决java.lang.IllegalArgumentException: pointerIndex out of range? 今天遇到一个bug:java.l ...

  3. Java基础-布局

  4. 如何使用XAMPP本地搭建一个属于你自己的网站

    你好,从今天开始,我将为大家带来一些我学习SEO和建站的免费教程,今天为大家带来的是如何用XAMPP搭建一个属于你自己的网站.来到这里,可以说很多在百度上已经过时了的资料需要总结的资料这里都有,你只要 ...

  5. Asp.Net 上传图片并生成高清晰缩略图(转)

    在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...

  6. Mac 下用 go 开发Android应用环境设置

    需要的工具 设置代理 请参考:http://www.cnblogs.com/ghj1976/p/5087049.html Mac 下命令行设置代理: export http_proxy=http:// ...

  7. LeetCode 67. Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  8. strstr、strcmp、strlen、strcpy

    const char* strstr(const char *str, const char* substr) { int i, j, temp; ; str[i] != '\0'; i++) { j ...

  9. adb shell am force-stop <package>

    •adb shell am force-stop <package>关闭程序的adb命令

  10. 初次体验架设PHP网站

     最近需要快速架设一个网站,因此淘了一份成型的模板,然后就开始..过程比较曲折. 测试环境:Win7旗舰+IIS7.5+mysql5.6+PHP5.2.17+PHPManagerForIIS-1.1. ...