一个说难不难的触发器 一张表有A,B,C(varchar2),D,E几列,触发器在A,B插入值或者更新的时候会向C列中插入值,格式为0001,并且这个值是递增的,还有条件是D=E,D是唯一值,E有些数据会放对应的D的值.假如我把中间已经有值的数据删掉了,再向新数据C列插值的时候会出现空号,比如0001,0002,0003,我把0002删掉,再插入就变成0004了,怎样可以把中间的值给补上?重新排好序.这个触发器该怎么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得效率最高的方法是另外建一张表,用来记录已经删掉的C值。然后在原来的表上建一个Before Delete触发器,把:OLD.C插入到这张表里面。其他的条件都很好满足,就不写了。记着在建触发器的时候不要忘了把新建的记录表里面已经填上的C再删掉。 补充一下,其实0002的值我不是删掉了,而是把它的E值给改变了,所以它就暂时没有了C值,假如我还要把它的E值给变成相等的D值,并且还有批量插入或者更新的其它数据,这样新建表好么?或者还有别的什么有效的办法没? 因为E是跟D对应着的,D的值唯一,所以E有很多重复的,当E跟D对不上的时候,这行的C就置为空,只有E跟D的某一值相同才会产生C,比如D某一值为D1,这行数据的E没有值,另外有10行数据的E都为D1(它们的D值不用去管),这时,这10行数据就要按0001这样的排列下来,但E的值是可变的,如果这些数据中E变为D2,那就要按D2的那些去排,所以中间会出现空号,想来想去觉得比较复杂.说实话我觉得这表设计得很垃圾,但只能这样,我没权利去修改表结构.哎~~头大了.有解决方法就行,先不用考虑效率,最好是只在触发器实现,或者加上过程也可.拜托了!~~ 请叫各位,有没有一个类似于一种累积的聚合函数 数据库结构和数据移植问题 回答出下列问题并能举出一列子者,如果你月薪没上2万,劝你跳槽吧 很菜的问题请大家帮帮忙 java.sql.SQLException: ORA-00903: 表名无效(急呀!不知道为什么) 抱怨!抱怨!抱怨!oracle要自己手写视图!!!! 帮我区分一下数据库逻辑存储结构的几个概念 请问Enterprise Manager的管理员和口令是什么啊? oracle 函数不走 else 问题 跪求大神指教一下数据库oracle oracle中的事件和与作业的问题! 怎样把表名作为参数传入存储过程中?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货