使用触发器做到在一个表更新记录时将更新前的记录存入另一个表
来源:互联网 发布:python入门书籍推荐 编辑:程序博客网 时间:2024/06/05 15:16
第一个表
SQL> desc new_table; 名称 是否为空? 类型 ----------------------------------------- -------- --------------- ID NUMBER(38) NAME VARCHAR2(20)
用来存储信息的表
SQL> desc history_table; 名称 是否为空? 类型 ----------------------------------------- -------- ------------ ID NUMBER(38) NAME VARCHAR2(20)我想要更新new_table的时候将更新前的数据存入到history_table;有下面两种方法:
第一种方法
create or replace trigger tr_update_newtablebefore update on new_table for each rowbegin insert into history_table values(:old.id,:old.name);end;/
这种方式优点是比较简单易读,缺点是如果列特别多的话就比较头疼。
第二种方法
使用自治事务(pragma autonomous_transaction)
create or replace trigger tr_update_newtablebefore update on new_table for each rowdeclare pragma autonomous_transaction;begininsert into history_table (select * from new_table where id =:old.id);dbms_output.put_line(:old.id); commit;end tr_update_newtable;
优点是不用输入每一列的值,缺点是如果你不提交的话(用commit),在这里的new_table是没有更新的。这个很容易让人疑惑,因为在命令行用select * from new_table你会发现已经更新了。在没有提交时,更新后的数据存在缓存里,在命令行里用select,会从缓存里调数据,而上面的程序里的select会读存在数据库里的原始表。
下面的commit是必须的,否则可能在下一次更新时出现错误
SQL> select * from new_table; ID NAME---------- ---------------------------------------- 39 junjieSQL> select * from history_table;未选定行SQL> update new_table set id=40;39已更新 1 行。SQL> commit;提交完成。SQL> select * from new_table; ID NAME---------- ---------------------------------------- 40 junjieSQL> select * from history_table; ID NAME---------- ---------------------------------------- 39 junjie
另外,自治事务中执行的操作是不能用rollback回滚回来的。
- 使用触发器做到在一个表更新记录时将更新前的记录存入另一个表
- Sqlserver触发器,一个表中有记录更新,根据特定条件判断是否插入另一个表中
- Oracle 将一张表的某些字段更新到本条记录的另一个字段
- Oracle用一个表的列更新另一个表对应记录的列
- sql2000用一个表的列值对另一个表相应的记录值进行更新
- 【转载】Oracle用一个表的列更新另一个表对应记录的列
- 选择数据库中重复的记录,用一个表中的数据更新另一个表
- SQL Server一个表添加数据,引发另一个表更新数据 的一个简单触发器例子
- 案例:使用伪记录,在eml表中如果更新员工的工资,要求使用触发器 达到 工资只能增加不能降低
- 将一个表查询的结果存入另一个表
- 用一个表的记录更新另外一个表.
- Oracle用一个表的列更新另一个表对应记录的列,一不小心有字段就更新为空了
- SQL语句 使用一个表更新另一个表的方法
- SQL语句 使用一个表更新另一个表的方法
- 将列更新从一个表传递到另一个表
- 在SQL中怎么样将一个表的的多条记录插入到另一个表中
- 在SQL中怎么样将一个表的的多条记录插入到另一个表中
- 将表的记录个数存入到变量中
- 算法导论学习笔记(20)——最大流
- 控制台或Winform程序中如何编码或解码Server.URLEncode
- 控制字符
- 静态库、共享库、动态库的创建和使用
- html 提示“数据在加载中,请稍后……”
- 使用触发器做到在一个表更新记录时将更新前的记录存入另一个表
- chapter2 Oracle应用---2总结
- 考研数一辅导全书的选则---考研论坛转载
- Project——Activity生命周期
- 学习OpenCV——Surf简化版
- textview,slider,switch,segmented ,action sheet,alert,indicator
- 最全的常用常用静态方法类
- chapter3 PL~SQL---1总结
- javascript中相互横向切换展示的窗口效果