本帖最后由 chenhaiyun163 于 2011-07-19 16:10:16 编辑

解决方案 »

  1.   

    1。改数据库的为自增长
    2。可以通过Id_Gen来做,即定义另外一张表,2个列
    column value
    插入一条这样数据havechild 0每次向你的业务表插数据时,先去Id_Gen里面查询一下value 插入,再更新一下Id_Gen里面的value值
      

  2.   

      首先,谢谢你的回答。
      我是个java web开发的新手,你说的意思是重新写一条sql语句吗?这条sql语句是在刚才的sql语句之前执行?
      望能够详细告知,感激不尽!
      

  3.   

    你 意思如果是 havechild为1,grouplevel为1. 这个值不会变
    havechild为0,grouplevel增加1  这个值在不断插入时grouplevel会一直变大?
      

  4.   

      要求是这样的:
       现在有组织机构:公安厅   它对应的havechild 为1,grouplevel为1;    现在增加一条数为它下面的组织机构:办公室    这时办公室对应的havechild为0,grouplevel要增加1,为2;
         
       再增加一条办公室下面的组织机构:档案管理室  这时候上面的办公室的havechild就要变为1了,grouplevel不动,还是2;同时  档案管理室的havechild为0,grouplevel要增加1,为3.
        
       总体是这个逻辑,以此类推。
      

  5.   

    现在的问题就是,逻辑代码基本都已经实现了,就是不知道应该怎么按照上面的逻辑来更新数据,要增加update的sql语句吗?因为之前向app_group增加的是固定的值,现在要想数据库中动态的加入活的值,遇到这种情况,应该怎么处理,这方面没有经验,向各位大虾请教下。帮到之处,感激不尽!
      

  6.   

    我大概看了下。你的意思。这是一个树状结构的字段更新问题。插入节点或删除节点,需要更新父节点的字段值。首先要放在一个事务里处理。   对于havechild:的更新比较简单,如果是在某个节点下插入节点,只要更新其父节点就可以了。       对于grouplevel:   ORACLE里面有树状查询的语法。可以将某个节点的,往上所有节点都查出来。   举个例子:
    ORACLE   有对LEVEL的直接支持。update     app_group     set   grouplevel   =   grouplevel+1   where   id   in(
    select   id     from   app_group       start   with   id=当前插入节点fatherid   connect   by   prior   fatherid=id  
    )删除节点比较麻烦。
    对于节点层次的重新计算,Oracle有对LEVEL的直接支持。
    如果是其他数据库,可能要用存储过程来处理了。