有表table如下:
id name code  element version
1   aa    11     ee       0
2   bb    22     ee       0
现在想做到:在新增,修改表中的id,name 等值的时候,那条数据的version字段每修改一次+1

解决方案 »

  1.   

    create or replace trigger abcdefg
    befor insert or update on table表名
    declear
        :new.version := nvl(:new.version,0) + 1;
    end abcdefg;
      

  2.   

    create or replace trigger tg_before_test
    before insert or update
    on tt
    for each row
    begin
      :new.version:=nvl(:old.version,-1)+1;
    end tg_before_test; 
      

  3.   

    create or replace trigger tg_before_test 
    before  update 
    on tt 
    for each row 
    begin 
      :new.version:=nvl(:old.version,-1)+1; 
    end tg_before_test;
      

  4.   


    可以行级的,用before的触发器:new.version=:old.version+1;
      

  5.   

    create or replace trigger tg_before_test
    before insert or update of id,name
    on t00
    for each row
    begin  :new.version:=:old.version+1;end tg_before_test;
    修改表中的id,name 等值的时候,那条数据的version字段每修改一次+1
    只要在update后面加个of id,name就行了。
      

  6.   

    还有一种方式:
    create or replace trigger tr_update_version
    before insert or update  
    on tab_data
    for each row
    begin  
      IF INSERTING OR UPDATING('ID')  OR UPDATING('NAME') THEN 
           :new.version:=:old.version+1;
      END IF; 
    end  tr_update_version; 
      

  7.   

    请问,2 3 5楼的nvl(:old.version,-1)的NVL是啥意思
      

  8.   

    update tb set version = version +1 建议还是在程序里面更新
      

  9.   


    nvl可能是笔者担心,有的记录没有这个version值,所以就用nvl判断一下,如果是null就是-1,然后+1,新的version就是0了。