界面有一个树形菜单,在Oralce9i中建立如下的表来描述树形菜单
表名:t_node
字段名:id(节点ID),parentId(父节点Id),name(节点名称),href(节点链接)。现在需要完成这样类似window资源管理器的功能:
选中树中某个节点A,然后拖拽至另外一个节点B,使以A根的子树长在B节点下面,但以前节点A的树还是存在,就是完成将A以及A的所有子节点复制到B下面。例如现在以A的父节点的数据有:(假设A的ID为1,B的ID为11)
id   parentID
2     1
3     2
4     2
5     3
11    0(0表示父节点为树根)
10    11经过上述的操作后,id   parentID
2     1
3     2
4     2
5     3
11    0(0表示父节点为树根)
10    11
1X     11
2X     1X
3X     2X
4X     2X
5X     3X
(含有X的节点表未该节点由ORACLE的序列发生器产生期ID号)请问一下,上述的操作的SQL该如何写(现在应用程序的语言是Java)
我该如何完成上述的要求?
谢谢,

解决方案 »

  1.   

    如果我没有描述清楚,麻烦联系一下我的MSN: [email protected]
    望不吝赐教,不胜感激
      

  2.   

    如果你的表结构满足如下规则:
    1、每个子节点有且只有一个父节点;
    2、节点深度无限制
    那么,楼主要求的功能非常简单:
    update t_node set parentID = 新目录id where id = 要移动的节点id
      

  3.   

    INSERT INTO t_Test 
    SELECT *
     FROM  
    (
        SELECT f_NodeID,f_ParentID FROM t_Test 
        WHERE f_NodeID !=1
        START WITH f_NodeID = 1    
        CONNECT  BY f_ParentID = PRIOR f_NodeID  
        UNION ALL 
        SELECT 
            f_NodeID ,
            10         --bB节点ID
         FROM t_Test
         WHERE f_NodeID = 1
    )