ORACLE事务问题的请教。 锁定一条记录没有进行任何修改,再提交,就算了一次事务了现在在该条建了一个触发器,用来把对该表的修改,插入,删除等动作记下来,把复制到另一表做为日志记录。但是,像上面的情况,也记录在内了,在触发器里,通过ORACLE自带的功能,能不能把没修改任何字段就提交的这种情况实别出来呢。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有进行insert, update, 和delete操作,根本不会触发你定义的触发器啊,也就不会复制到另一个日志记录表中。 进行UPDATE了,但是没有任何字段的修改,触发我定义的触发器了,我日志表里已经有数据了。 update没有任何字段的修改什么意思? 用:old.col 是否等于 :new.col1 来判断一下是否修改了数据,如果没有修改就不写日志表。只有进行update就是 更新的值和原来的值相等,也会触发执行。 4楼理解我意思了,但是用old和new判断也不行,业务要求比较麻烦,我已经改了好多次了,总是有漏的,这都这么写了,if (updating('age') and :new.age=:old.age) or (updating('COMPANY') and :new.COMPANY=:old.COMPANY)但是我想从根上给解决了,对于没有改任何字段的事务,我想区别出来,然后不像日志表中插记录。 像你说这样就不能用触发器了,触发器的机制是监控表上的操作事件,而不是操作内容. 可以写一个日志方法,方法中定义一个IsChange 变量,如果有更新的时候就是true,没有更新的基石false。最后日志方法根据变量值写日志。 应当是楼主你所说的锁定一条记录本身就执行了update操作,selet ... for update和commit语句都不会触发触发器了,你的解发器被触发肯定是执行了udpate操作,哪怕你使用原值update。这种情况下系统无法判定你是否有修改,建议楼主改变锁记录的方式。 哦,,我现在的是什么方式的锁,应该改成什么类型的呢?不要用for update是吗?系统有编辑的功能,点了编辑,然后直接保存,就插一条记录了。 你的系统在点击保存时应当是执行了update的语句,虽然更新后的内容与更新前相同,但是系统仍然会触发update触发器,这点数据库是无法分辨的。你应当做的是在前台判断,如果没有更改的内容,点击保存时应当不执行update语句。 索引字段的选取问题 建了一个表,因为数据比较大,所以建立了多个索引,怎样统计这些索引占了多大空间? 怎么找出两个表中不同的数据呢? 请问如何使用sql*loader加载指定行的记录? 求助SQL语句 我这样写sql语句,大家说对不对? 什么时候会出现这个错误:ORA-00904 小弟有个问题请教诸位~~~关于存储过程 一个关于检索排序的问题,怎么也想不出办法来,只好求教高手了! 請問 ORACLE FORM 中 LOV要如何自動跳出 oracle rac 下如何保证取得的时间一致? 一段差不多的Sql 执行结果不同。求一个解决方案
根本不会触发你定义的触发器啊,也就不会复制到另一个日志记录表中。
但是用old和new判断也不行,业务要求比较麻烦,我已经改了好多次了,总是有漏的,
这都这么写了,
if (updating('age') and :new.age=:old.age) or (updating('COMPANY') and :new.COMPANY=:old.COMPANY)
但是我想从根上给解决了,
对于没有改任何字段的事务,我想区别出来,然后不像日志表中插记录。
应当是楼主你所说的锁定一条记录本身就执行了update操作,selet ... for update和commit语句都不会触发触发器了,你的解发器被触发肯定是执行了udpate操作,哪怕你使用原值update。这种情况下系统无法判定你是否有修改,建议楼主改变锁记录的方式。
你的系统在点击保存时应当是执行了update的语句,虽然更新后的内容与更新前相同,但是系统仍然会触发update触发器,这点数据库是无法分辨的。你应当做的是在前台判断,如果没有更改的内容,点击保存时应当不执行update语句。