oracle 递归查询 便捷查询菜单子栏目分级

先插入地区字段SQL

-- ----------------------------
-- Table structure for LF_AREA
-- ----------------------------
DROP TABLE "RICHARD"."LF_AREA";
CREATE TABLE "RICHARD"."LF_AREA" (
  "ID" NUMBER(6) NOT NULL ,
  "NAME" VARCHAR2(64 BYTE) ,
  "PARENT_ID" NUMBER(6) DEFAULT 0  ,
  "IEVEL" NUMBER(1) DEFAULT 1  ,
  "LIST_ORDER" NUMBER(6) DEFAULT 10000  ,
  "STATUS" NUMBER(1) DEFAULT 0  
)
TABLESPACE "USERS"
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1
  MAXEXTENTS 2147483645
  BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "RICHARD"."LF_AREA"."NAME" IS '地区名称';
COMMENT ON COLUMN "RICHARD"."LF_AREA"."PARENT_ID" IS '地区父级';
COMMENT ON COLUMN "RICHARD"."LF_AREA"."IEVEL" IS '地区层级';
COMMENT ON COLUMN "RICHARD"."LF_AREA"."LIST_ORDER" IS '排序';
COMMENT ON COLUMN "RICHARD"."LF_AREA"."STATUS" IS '状态';

-- ----------------------------
-- Records of LF_AREA
-- ----------------------------
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10002', '黑龙江省', '0', NULL, NULL, '0');
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10003', '哈尔滨市', '10002', '1', '10000', '1');
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10004', '双鸭山市', '10002', '1', '10000', '1');
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10005', '道里区', '10003', '1', '10000', '1');
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10006', '南岗区', '10003', '1', '10000', '1');
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10007', '尖山区', '10004', '1', '10000', '1');
INSERT INTO "RICHARD"."LF_AREA" VALUES ('10008', '四方台区 ', '10004', '1', '10000', '1');

-- ----------------------------
-- Primary Key structure for table LF_AREA
-- ----------------------------
ALTER TABLE "RICHARD"."LF_AREA" ADD CONSTRAINT "LF_AREA_PK" PRIMARY KEY ("ID");

-- ----------------------------
-- Triggers structure for table LF_AREA
-- ----------------------------
CREATE TRIGGER "RICHARD"."tig_area" BEFORE INSERT ON "RICHARD"."LF_AREA" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW WHEN (NEW.id IS NULL) 
BEGIN
SELECT seq_area.NEXTVAL INTO :NEW.id FROM dual;
END;
/
LEVEL:查询节点层次,从1开始。

CONNECT_BY_ISLEAF:查询节点是否是叶子节点,是则为1,不是则为0

SELECT   id,name,parent_id,LEVEL, CONNECT_BY_ISLEAF FROM  LF_AREA START WITH id=10002 CONNECT BY PRIOR ID=PARENT_ID ORDER BY ID

发布了51 篇原创文章 · 获赞 17 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/wq57885/article/details/80995741