id    oid   name  
  1    100    Chery
  2    101    Jack
  3    101    Mark要求:  先数据库插入记录时,id是主键,自动递增的,oid  不是自增的 它的值 是在一条记录的值的基础之上递增1  如果表空记录时,oid的默认值为 零  sql语句该如何写啊  谢谢各位  O(∩_∩)O~

解决方案 »

  1.   


    第二条跟第三条的oid怎么都是101?把oid设置成自增不就可以了吗?
      

  2.   


    哦, 我的错,大错咯,该是102  嘿嘿   
    能不能通过sql语句实现哦  
      

  3.   

    不行!比如oracle中的自增长本来就是用触发器实现的,你也可以用触发器实现
      

  4.   

    要通过sql来实现是完全可以的
    oracle的话可以通过sequence来实现insert into t values(s_t_id.nextvalue, s_t_oid.nextval, 'xxx');s_t_id和s_t_oid都是oracle里的sequence,如果你用的是oracle,你自然知道我说的是什么意思.非oracle的数据库,又不想做成自增字段的话,可以自己写个函数来获取最大oid,然后在insert的时候调用这个函数,下面是伪代码(具体语法因具体数据库类型而异)
    ==================================================================
    create function getNextOid () {
       var v_oid int;
       select nvl(max(oid), -1) + 1 into v_oid from t;
       return v_oid;
    }insert into t values(getNextOid(), 'xxx');
      

  5.   


    --[Orac9i PL/SQL环境]declare
           myoid number(5):=0;
      
    begin
         select max(oid) into myoid from yourTable;
         
         if myoid is null then
           myoid:=0; --没有记录则从0开始
         end if;
         
         myoid:=myoid+1;
        
        --接下来是你的相关插入代码(记得commit;)
    end;
      

  6.   

    直接写sql也是可以的:
    insert into t (oid, name)
    select nvl(max(oid), -1) + 1, 'xxx') from t
      

  7.   

    我用的是mysql  (⊙o⊙)
      

  8.   

    mysql 的话把nvl改一下就可以了insert into t (oid, name)
    select ifnull(max(oid), -1) + 1, 'xxx' from t;
      

  9.   

    我用的是PreparedStatement 做插入的哦
      

  10.   

    可以将当前的最大值取出来SELECT max(oid) FROM table_name;插入的时候使oid为当前最大值的+1.PS:此方法较机械,适合初学者。。