界面有一个树形菜单,在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)
我该如何完成上述的要求?
谢谢,
表名: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、每个子节点有且只有一个父节点;
2、节点深度无限制
那么,楼主要求的功能非常简单:
update t_node set parentID = 新目录id where id = 要移动的节点id
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
)