从一张tree表根据条件 获取一棵树型数据 ,如何复制到此tree表中,复制的时候ID是自增的,所以数据中的ID和PARENTID都得动态改变。对应父子关系不能表存储过程已经实现。现在想用java实现。各位高手帮忙看看。谢谢。下面是存储过程实现的。--创建表
CREATE TABLE SCOTT_TREE
(
ID VARCHAR2(32),
NAME VARCHAR2(100),
PARENT_ID VARCHAR2(32)
)
--查询
SELECT ST.*
FROM SCOTT_TREE ST
START WITH ST.NAME = 'ROOT'
CONNECT BY PRIOR ST.ID = ST.PARENT_ID
ORDER BY LEVEL ASC;
--使用存储过程处理树的复制粘贴
CREATE OR REPLACE PROCEDURE COPY_TREE AS
TYPE LOOKUP IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(32); --定义存放id的PL/SQL表
TYPE TREE_TABLE IS TABLE OF SCOTT_TREE%ROWTYPE; --定义存放表信息的PL/SQL表
LOOK LOOKUP;
RECORDS TREE_TABLE;
V_ID SCOTT_TREE.ID%TYPE;
BEGIN
SELECT ST.* BULK COLLECT
INTO RECORDS
FROM SCOTT_TREE ST
START WITH ST.NAME = 'ROOT'
CONNECT BY PRIOR ST.ID = ST.PARENT_ID;
FOR I IN RECORDS.FIRST() .. RECORDS.LAST() LOOP
V_ID := SYS_GUID();
LOOK(RECORDS(I).ID) := V_ID; --将新生成的id暂存到记录表里
RECORDS(I).ID := V_ID;
IF RECORDS(I).NAME <> 'ROOT' THEN
RECORDS(I).PARENT_ID := LOOK(RECORDS(I).PARENT_ID);
END IF;
END LOOP;
--批量想表中插入数据
FORALL J IN RECORDS.FIRST() .. RECORDS.LAST()
INSERT INTO SCOTT_TREE VALUES RECORDS (J);
END COPY_TREE;
CREATE TABLE SCOTT_TREE
(
ID VARCHAR2(32),
NAME VARCHAR2(100),
PARENT_ID VARCHAR2(32)
)
--查询
SELECT ST.*
FROM SCOTT_TREE ST
START WITH ST.NAME = 'ROOT'
CONNECT BY PRIOR ST.ID = ST.PARENT_ID
ORDER BY LEVEL ASC;
--使用存储过程处理树的复制粘贴
CREATE OR REPLACE PROCEDURE COPY_TREE AS
TYPE LOOKUP IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(32); --定义存放id的PL/SQL表
TYPE TREE_TABLE IS TABLE OF SCOTT_TREE%ROWTYPE; --定义存放表信息的PL/SQL表
LOOK LOOKUP;
RECORDS TREE_TABLE;
V_ID SCOTT_TREE.ID%TYPE;
BEGIN
SELECT ST.* BULK COLLECT
INTO RECORDS
FROM SCOTT_TREE ST
START WITH ST.NAME = 'ROOT'
CONNECT BY PRIOR ST.ID = ST.PARENT_ID;
FOR I IN RECORDS.FIRST() .. RECORDS.LAST() LOOP
V_ID := SYS_GUID();
LOOK(RECORDS(I).ID) := V_ID; --将新生成的id暂存到记录表里
RECORDS(I).ID := V_ID;
IF RECORDS(I).NAME <> 'ROOT' THEN
RECORDS(I).PARENT_ID := LOOK(RECORDS(I).PARENT_ID);
END IF;
END LOOP;
--批量想表中插入数据
FORALL J IN RECORDS.FIRST() .. RECORDS.LAST()
INSERT INTO SCOTT_TREE VALUES RECORDS (J);
END COPY_TREE;
解决方案 »
- SpringMVC 请求问题
- 关于tomcat的contex重复加载
- tomcat频繁宕机,线程数不断网上涨,大量线程被阻塞,附jconsole 线程状态
- spring事务不回滚
- 进来看看吧
- 求救:请问 Java 的 Applet 能否实现 socket UDP 与任意端口进行通讯啊??
- 大侠帮忙啊,数据库查询报错
- 关于cloudscape与数据库应用程序? 50分!
- 谁有jboss cmp 和 cluster官方文档谢谢,等待。。。
- 简单问题,如何把包合并?望高手指教
- 关于SSH的外键的问题
- zimbra soap 调用! 如何查看zimbra soap调用的链接? 各位有没关于zimbra soap调用的例子?
2..循环树型数据,将以前的id当做key,新id当做value(新id从序列中获取),分别存在map中!
3..获取新的父id,用以前的父id在刚才的map中获取,map.get(以前父id)
这样其他数据都好封装了,最后将封装的数据批量insert数据库!