Oracle实现对树形结构的数据进行层级查询。
方式一:使用SYS_CONNECT_BY_PATH
--专题目录的Tree层级显示
SELECT level as "level",
pkid,
specialclname,
specialclcode,
SYS_CONNECT_BY_PATH(specialclname, '-') as "fullpath"
FROM MDS_DM_SPECIALCATALOG
START WITH parentid is null
CONNECT BY PRIOR pkid = parentid
ORDER SIBLINGS BY specialclname

方式二:循环查询单个结果插入表结构
--创建临时表
CREATE TABLE "T_TMP_DIR" ("DIRECTORYID" NUMBER,"DIRS" VARCHAR2(4000));
--插入数据到数据集-目录层级的临时表
DECLARE cursor dir IS SELECT
DIRECTORYID
FROM
core_dm_datasourcedirectory;
v_DIRECTORYID NUMBER;
BEGIN
open dir;
LOOP
EXIT WHEN dir % notfound;
FETCH dir INTO v_DIRECTORYID;
dbms_output.put_line ( v_DIRECTORYID );
INSERT INTO t_tmp_dir(
directoryid,dirs
) (SELECT
v_DIRECTORYID AS directoryid,
listagg ( to_char( dirt.directoryname ), '-' ) within GROUP ( ORDER BY dirt.dircode ) AS dirs
FROM
( SELECT * FROM core_dm_datasourcedirectory CONNECT BY nocycle PRIOR parentdirectoryid = directoryid START WITH directoryid = v_DIRECTORYID ) dirt);
END LOOP;
close dir;
END;

本文介绍两种在Oracle数据库中查询树形结构数据的方法。第一种使用SYS_CONNECT_BY_PATH递归查询,展示专题目录的层级结构;第二种通过创建临时表并循环插入数据来实现。适用于需要处理复杂层级数据的应用场景。
1901

被折叠的 条评论
为什么被折叠?



