首先创建两个结构相同的表

  1. -- Create table
  2. create table TABLE_TEMP
  3. (
  4. userid NUMBER not null,
  5. username NVARCHAR2(50),
  6. userno NVARCHAR2(60),
  7. cardid NVARCHAR2(18),
  8. createdate DATE,
  9. redate DATE,
  10. month VARCHAR2(6),
  11. amount NUMBER
  12. )
  13. tablespace USERS
  14. pctfree 10
  15. initrans 1
  16. maxtrans 255
  17. storage
  18. (
  19. initial 16
  20. next 8
  21. minextents 1
  22. maxextents unlimited
  23. );

第二个表结构

  1. -- Create table
  2. create table TEST_TABLE_TEMP
  3. (
  4. userid NUMBER not null,
  5. username NVARCHAR2(50),
  6. userno NVARCHAR2(60),
  7. cardid NVARCHAR2(18),
  8. createdate DATE,
  9. redate DATE,
  10. month VARCHAR2(6),
  11. amount NUMBER
  12. )
  13. tablespace USERS
  14. pctfree 10
  15. initrans 1
  16. maxtrans 255
  17. storage
  18. (
  19. initial 16
  20. next 8
  21. minextents 1
  22. maxextents unlimited
  23. );

其中这两个表的ID都是不能自动增长的属性 没有建立sequences 序列以及自动增长的触发器

建立触发器:

  1. create or replace trigger triggers_table_tempToTemp
  2. before insert or update or delete
  3. on table_temp for each row
  4. declare
  5. integrity_error exception;
  6. errno integer;
  7. errmsg char(200);
  8. dummy integer;
  9. found boolean;
  10.  
  11. begin
  12.  
  13. if inserting then
  14. insert into test_table_temp(userid,UserName,userno,cardid,createdate,redate,month,amount)
  15. values(:NEW.userid,:NEW.UserName,:NEW.userno,:new.cardid,:NEW.createdate,:NEW.redate,:NEW.month,:NEW.amount);
  16. elsif updating then
  17. update test_table_temp set userid=:NEW.userid,
  18. UserName=:NEW.UserName,userno=:NEW.userno,
  19. cardid=:NEW.cardid ,createdate=:NEW.createdate,
  20. redate=:NEW.redate,
  21. month=:NEW.month,
  22. amount=:NEW.amount
  23. where USERID=:OLD.USERID;
  24. elsif deleting then
  25. delete from test_table_temp where userid=:OLD.userid;
  26. end if;
  27. exception
  28. when integrity_error then
  29. raise_application_error(errno, errmsg);
  30. end;
  31. --执行报错,错误信息:ORA-04084 无法更改此触发器类型的NEW
  32. --把触发器的after改成before 触发
  33. --实现数据增删改 同时实现两个数据表同步信息

测试数据

  1. insert into TABLE_temp(userid,USERNAME,USERNO,CARDID,CREATEDATE,REDATE,MONTH,AMOUNT)
  2. values('1','小晴','20140408','201404087976',to_date('2014-04-08','yyyy-mm-dd'),to_date('2014-04-08','yyyy-mm-dd'),'201404','100000')
  3.  
  4. update TABLE_temp set USERNAME='小清新' where userid=1
  5. delete from TABLE_temp where userid=1

数据库中把一个表中的数据复制到另一个表中 如果不用其他方法直接用SQL语句实现:

1、如果是整个表复制如下:
insert into table1 select  * from table2
2、如果是有选择性的复制数据如下:
insert into table1(column1,column2,column3...) select column1,column2,colunm3... from table2
3、一个数据库中的表中的数据复制到另一个数据库中的一个表,使用方法如下:
insert into 数据库A.dbo.table1(col1,col2,col3...) select col1,col2,col3... from 数据库B.dbo.table2

oracle triggers 实现两个结构相同的表的数据级联更新操作的更多相关文章

  1. oracle 批量更新之将一个表的数据批量更新至另一个表

      oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...

  2. SQLSEVER 不同服务器下两个结构相似的表实现数据同步(触发器)

    1.建立链接服务器 在ServerA 中创建指向ServerB的链接服务器,并做好账号映射.addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档. 第1个参数LNK_Serv ...

  3. SQL 两张结构一样的表合并查询 .

    select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...

  4. SQL 将两个结构相同的表合并到成一个表

    select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...

  5. Oracle数据库中将一个数据库中一张表的数据导入到另外一张表

    INSERT INTO DBTHNEW.L_MEMBER_ROLE_REL SELECT    *FROM    DBTH.L_MEMBER_ROLE_REL

  6. JDBC获得DB2表结构并且将表中数据脱敏后转移的程序示例

    完整项目地址:https://github.com/zifeiy/totomi 代码示例: import java.io.File; import java.io.FileInputStream; i ...

  7. mybatis+Oracle 批量插入数据,有数据做更新操作

    <!-- 批量添加 -->     <insert id="batchAdd" parameterType="java.util.List"& ...

  8. Oracle 给表添加主键和使ID自增、触发器、创建结构一样的表

    1.关于主键:在建表时指定primary key字句即可:create table test( id number(6) primary key, name varchar2(30));如果是对于已经 ...

  9. oracle、mysql、sybase和sqlserver复制表结构和数据

    Sql Server(sybase): 1.复制表结构: 新建表student2,并且结构同表syn_xj_student一致.Sql语句如下: 2.复制表数据,并排除俩表中相同的数据: insert ...

随机推荐

  1. Hibernate(八)多对多映射

    一.创建数据表 --学生证表 create table paper ( pid number primary key, pdesc ) , sid number references student( ...

  2. 使用web_url注意Resource的选项

    在使用web_url的时候,一定注意Resource的使用,一般最好使用Resource=0,如果使用Resource=1,那么一定要修改配置. Resource Attribute If Resou ...

  3. shell脚本中的几个括号总结(小括号/大括号/花括号)

    from:http://www.cnblogs.com/hanyan225/archive/2011/10/06/2199652.html 是毋庸置疑的,方便了我们也迷惑了我们,比如这些杂七杂八的括号 ...

  4. JS将数字转换为大写汉字人民币

    <script language="jscript"> function convertCurrency(currencyDigits) { // Constants: ...

  5. 【Linux】在Linux上查看并替换特殊字符

    现有windows上新建的一个txt文件file01.txt,内容如下: 我们通过ftp上传到Linux,在Linux下使用命令cat –A file01.txt查看文件内容发现该文件的结尾全是^M$ ...

  6. python之函数用法locals()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法locals() #locals() #说明:查找局部变量,返回一个名字/值对的字典对 ...

  7. Redis学习(8)-redis持久化

    内存(兔子):高效,断电数据丢失 硬盘(乌龟):读写速度慢于内存的,断电数据依旧存在 持久化:把数据保存在硬盘上 关系型数据库:MySQL-持久化: 任何操作都是硬盘上,断电以后,硬盘上数据还在. 非 ...

  8. Centos定时执行python脚本

    其实就是linux的定时任务.老记不住参数,这次写下来,省着老百度.本文没有技术含量,请大家不要吐槽. ================================================ ...

  9. Nginx的HTTPS 301重定向到另一个TLD(托管在同一服务器上)没有显示出SSL警告

    我自己 example.com, .com.au, .net, .net.au, ... (8 in total). 我想所有的这些顶级域名以301的域名重定向到安全.COM域 https://www ...

  10. Mysql 5.7 从节点配置多线程主从复制

    Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有一个线 ...