Oracle实现对树形结构的数据进行层级查询

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;

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值