我不赞成。
1:有触发器会大大降低新增删除的速度
2:新增你要写trigger,删除你也要写trigger,更新你还要写trigger。维护麻烦!你写trigger是为了查询方便,我觉得你可以写成视图来做。
如果你的版本是oracle9i以上的话,你可以做成物化视图,那样更简单。
查许也很方便。

解决方案 »

  1.   

    没问题,你做以下判断:
    1,用户输入的分别存放在临时表里,FLAG里不包括HJ*字样,所以触发器执行操作
    2,第一步执行插入记录操作,又触发了触发器,但FLAG里包括HJ*字样,所以触发器不执行操作,
    3,如此循环,ok!
      

  2.   

    不知道你这样做的目的何在,不过1. FLAG字段无需如此麻烦,只要用0,1表示是否是合计结果就行了,至于23_2000之类的,已经有ADDV和YY字段表示了。
    2.你在触发器里是无法查询触发表的,不知你如何得到合计,还是在程序里处理比较好。
      

  3.   

    我的ORACLE不是9i是8i,我的目的就是让我的表自动生成那两条合计的记录(用户是不会INSERT那两条的),哪种方法效率高我当然就用哪种喽,就是不会!:P
    建视图可实现我的目的吗?请高手细说来....
      

  4.   

    ID ADDV  YY    KIND   Col1   Col2   FLAG 
    1  23   2000   工业   14   2.3    23_2000
    2  23   2000   农业   36   3.74   23_20004  24   2000   地表水 20   2.4    24_2000
    5  24   2000   地下水 10   3.2    24_2000现在问题是我表里没有那两条记录,我用什么方法把它们插进去呢?其值就是每条合计上面的N条记录值的和。越想越糊涂~~~~~~~~~~~能实现吗?(越来越怀疑可行性了!呵呵)
      

  5.   

    insert into tbname  select max(id)+1,addv,max(yy),'合计',sum(col1),sum(col2),max(flag)||'HJ*' from tbname group by addv;
      

  6.   

    合计问题解决,但我怎么实现不同的合计呢?比如:3  23   2000   合计   50   6.04   23_2000_HJ
    6  24   2000   合计   30   5.6    24_2000_HJ3是1\2条记合计来的,6是4\5条记录合计来的,用个什么方法能够智能的判断一下呢?是写个触发器插一条就判断一条,还是写个过程什么???迷茫~~~~~
    谁合计谁是通过FLAG字段标识的,所以上面语句也要group by FLAG才行
      

  7.   

    为什么不换种思路,干脆新建一张合计表,每次插入记录时,就利用触发器按照ADDV, YY 将对应的Col1和Col2合计到合计表中,查询的时候只要连接一下就可以了。
      

  8.   

    也许是个好方法,我每次执行插入时,触发一个触发器,按照我的目的求合,如果这条合计的记录已存在于合计表中,就更新其值,如果没有就插入一条新记录.
    合计表我有了,可将来我查询时怎么能连成我想要的样子呢?每条合计记录显示在不同的位置,
    如:
    ID ADDV  YY    KIND   Col1   Col2   FLAG 
    1  23   2000   工业   14   2.3    23_2000
    2  23   2000   农业   36   3.74   23_2000
    3  23   2000   合计   50   6.04   23_2000_HJ
    4  24   2000   地表水 20   2.4    24_2000
    5  24   2000   地下水 10   3.2    24_2000
    6  24   2000   合计   30   5.6    24_2000_HJ
    我1/2/4/5条记录在一张表,3/6在一张表,怎么连呢?
      

  9.   

    合计表都不用建,flag字段也可不要。
    直接建立视图即可。
    create or replace view aa_view 
    select addv,yy,sum(col1) col1,sum(col2) col2 from aa group by addv,yy;这样如果想得到你的结果,可以执行查询:
    select addv,yy,kind,col1,col2 from aa 
    union 
    select addv,yy,'合计',col1,col2 from aa_view
    order by 1,2
    这样也可以吧?!
      

  10.   

    只要不显示id ,就可以利用addv,yy,id排序得到你需要的显示结果。select ... from -- not include id!
    (
    select id, ... from yourtable
    union all
    select 9999999 as id, .... from 合计表
    )
    order by addv,yy,id
      

  11.   

    感谢各位的支持!问题已解决,用snowy_howe(天下有雪) 的办法可以最快的方式实现我的目的,就是生成结果排序上有点小问题,但稍微改一下就可以了!
     Lastdrop(空杯)的方法有时间我也会试试!
     谢谢各位!:)