oracle triggers 实现两个结构相同的表的数据级联更新操作
首先创建两个结构相同的表
- -- Create table
- create table TABLE_TEMP
- (
- userid NUMBER not null,
- username NVARCHAR2(50),
- userno NVARCHAR2(60),
- cardid NVARCHAR2(18),
- createdate DATE,
- redate DATE,
- month VARCHAR2(6),
- amount NUMBER
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 16
- next 8
- minextents 1
- maxextents unlimited
- );
第二个表结构
- -- Create table
- create table TEST_TABLE_TEMP
- (
- userid NUMBER not null,
- username NVARCHAR2(50),
- userno NVARCHAR2(60),
- cardid NVARCHAR2(18),
- createdate DATE,
- redate DATE,
- month VARCHAR2(6),
- amount NUMBER
- )
- tablespace USERS
- pctfree 10
- initrans 1
- maxtrans 255
- storage
- (
- initial 16
- next 8
- minextents 1
- maxextents unlimited
- );
其中这两个表的ID都是不能自动增长的属性 没有建立sequences 序列以及自动增长的触发器
建立触发器:
- create or replace trigger triggers_table_tempToTemp
- before insert or update or delete
- on table_temp for each row
- declare
- integrity_error exception;
- errno integer;
- errmsg char(200);
- dummy integer;
- found boolean;
- begin
- if inserting then
- insert into test_table_temp(userid,UserName,userno,cardid,createdate,redate,month,amount)
- values(:NEW.userid,:NEW.UserName,:NEW.userno,:new.cardid,:NEW.createdate,:NEW.redate,:NEW.month,:NEW.amount);
- elsif updating then
- update test_table_temp set userid=:NEW.userid,
- UserName=:NEW.UserName,userno=:NEW.userno,
- cardid=:NEW.cardid ,createdate=:NEW.createdate,
- redate=:NEW.redate,
- month=:NEW.month,
- amount=:NEW.amount
- where USERID=:OLD.USERID;
- elsif deleting then
- delete from test_table_temp where userid=:OLD.userid;
- end if;
- exception
- when integrity_error then
- raise_application_error(errno, errmsg);
- end;
- --执行报错,错误信息:ORA-04084 无法更改此触发器类型的NEW值
- --把触发器的after改成before 触发
- --实现数据增删改 同时实现两个数据表同步信息
测试数据
- insert into TABLE_temp(userid,USERNAME,USERNO,CARDID,CREATEDATE,REDATE,MONTH,AMOUNT)
- values('1','小晴','20140408','201404087976',to_date('2014-04-08','yyyy-mm-dd'),to_date('2014-04-08','yyyy-mm-dd'),'201404','100000')
- update TABLE_temp set USERNAME='小清新' where userid=1
- 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 实现两个结构相同的表的数据级联更新操作的更多相关文章
- oracle 批量更新之将一个表的数据批量更新至另一个表
oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...
- SQLSEVER 不同服务器下两个结构相似的表实现数据同步(触发器)
1.建立链接服务器 在ServerA 中创建指向ServerB的链接服务器,并做好账号映射.addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档. 第1个参数LNK_Serv ...
- SQL 两张结构一样的表合并查询 .
select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...
- SQL 将两个结构相同的表合并到成一个表
select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...
- Oracle数据库中将一个数据库中一张表的数据导入到另外一张表
INSERT INTO DBTHNEW.L_MEMBER_ROLE_REL SELECT *FROM DBTH.L_MEMBER_ROLE_REL
- JDBC获得DB2表结构并且将表中数据脱敏后转移的程序示例
完整项目地址:https://github.com/zifeiy/totomi 代码示例: import java.io.File; import java.io.FileInputStream; i ...
- mybatis+Oracle 批量插入数据,有数据做更新操作
<!-- 批量添加 --> <insert id="batchAdd" parameterType="java.util.List"& ...
- Oracle 给表添加主键和使ID自增、触发器、创建结构一样的表
1.关于主键:在建表时指定primary key字句即可:create table test( id number(6) primary key, name varchar2(30));如果是对于已经 ...
- oracle、mysql、sybase和sqlserver复制表结构和数据
Sql Server(sybase): 1.复制表结构: 新建表student2,并且结构同表syn_xj_student一致.Sql语句如下: 2.复制表数据,并排除俩表中相同的数据: insert ...
随机推荐
- Hibernate(八)多对多映射
一.创建数据表 --学生证表 create table paper ( pid number primary key, pdesc ) , sid number references student( ...
- 使用web_url注意Resource的选项
在使用web_url的时候,一定注意Resource的使用,一般最好使用Resource=0,如果使用Resource=1,那么一定要修改配置. Resource Attribute If Resou ...
- shell脚本中的几个括号总结(小括号/大括号/花括号)
from:http://www.cnblogs.com/hanyan225/archive/2011/10/06/2199652.html 是毋庸置疑的,方便了我们也迷惑了我们,比如这些杂七杂八的括号 ...
- JS将数字转换为大写汉字人民币
<script language="jscript"> function convertCurrency(currencyDigits) { // Constants: ...
- 【Linux】在Linux上查看并替换特殊字符
现有windows上新建的一个txt文件file01.txt,内容如下: 我们通过ftp上传到Linux,在Linux下使用命令cat –A file01.txt查看文件内容发现该文件的结尾全是^M$ ...
- python之函数用法locals()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法locals() #locals() #说明:查找局部变量,返回一个名字/值对的字典对 ...
- Redis学习(8)-redis持久化
内存(兔子):高效,断电数据丢失 硬盘(乌龟):读写速度慢于内存的,断电数据依旧存在 持久化:把数据保存在硬盘上 关系型数据库:MySQL-持久化: 任何操作都是硬盘上,断电以后,硬盘上数据还在. 非 ...
- Centos定时执行python脚本
其实就是linux的定时任务.老记不住参数,这次写下来,省着老百度.本文没有技术含量,请大家不要吐槽. ================================================ ...
- Nginx的HTTPS 301重定向到另一个TLD(托管在同一服务器上)没有显示出SSL警告
我自己 example.com, .com.au, .net, .net.au, ... (8 in total). 我想所有的这些顶级域名以301的域名重定向到安全.COM域 https://www ...
- Mysql 5.7 从节点配置多线程主从复制
Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有一个线 ...