You are on page 1of 3

********************************************************************************

*************************
********************************************************************************
*************************
*************************** TO GET THE FULL NAME OF ONE CHILD *
*************************
********************************************************************************
*************************
********************************************************************************
*************************
********************************************************************************
*************************
SELECT
GOV_CODE,
SUBSTR(MAX(REPLACE(
SYS_CONNECT_BY_PATH(GOV_NAME, '/')
,'/',' - ')),4) GOV_NAME
FROM (
select A.*,
row_number() OVER (Partition by GOV_CODE order by GOV_CODE) ROW#
from INFLU.L_GOV A)
WHERE LEVEL = (SELECT MAX(LEVEL) FROM INFLU.L_GOV CONNECT BY PRIOR GOV_PARENT_CO
DE = GOV_CODE START WITH GOV_PARENT_CODE = X )
CONNECT BY PRIOR GOV_PARENT_CODE = GOV_CODE
START WITH GOV_PARENT_CODE = X AND GOV_CODE = 13
GROUP BY GOV_CODE
-- X IS THE PARENT CODE OF THE MOST LAST LEAFE
CREATE TABLE L_GOV
(
GOV_CODE NUMBER(5),
GOV_NAME VARCHAR2(200 BYTE),
GOV_PARENT_CODE NUMBER(5),
GOV_FULLNAME VARCHAR2(1000 BYTE)
)
TABLESPACE USERS
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

CREATE UNIQUE INDEX PK_L_GOV ON L_GOV


(GOV_CODE)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;

ALTER TABLE L_GOV ADD (


CONSTRAINT PK_L_GOV PRIMARY KEY (GOV_CODE)
USING INDEX
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
));

ALTER TABLE L_GOV ADD (


FOREIGN KEY (GOV_PARENT_CODE)
REFERENCES L_GOV (GOV_CODE));

INSERT INTO INFLU.L_GOV ( GOV_CODE, GOV_NAME, GOV_PARENT_CODE,


GOV_FULLNAME ) VALUES (
1, 'GOV 1', NULL, NULL);
INSERT INTO INFLU.L_GOV ( GOV_CODE, GOV_NAME, GOV_PARENT_CODE,
GOV_FULLNAME ) VALUES (
2, '????E 2', NULL, NULL);
INSERT INTO INFLU.L_GOV ( GOV_CODE, GOV_NAME, GOV_PARENT_CODE,
GOV_FULLNAME ) VALUES (
3, 'GOV 3', NULL, NULL);
INSERT INTO INFLU.L_GOV ( GOV_CODE, GOV_NAME, GOV_PARENT_CODE,
GOV_FULLNAME ) VALUES (
4, 'GOV 1_1', 1, NULL);
INSERT INTO INFLU.L_GOV ( GOV_CODE, GOV_NAME, GOV_PARENT_CODE,
GOV_FULLNAME ) VALUES (
5, '????E 2_1', 2, NULL);
INSERT INTO INFLU.L_GOV ( GOV_CODE, GOV_NAME, GOV_PARENT_CODE,
GOV_FULLNAME ) VALUES (
6, '????E 2_1_1', 5, NULL);
COMMIT;

********************************************************************************
*************************
********************************************************************************
*************************
*************************** THE ORIGENAL CODE ********
*************************
********************************************************************************
*************************
********************************************************************************
*************************
********************************************************************************
*************************
SELECT
GOV_CODE,
SUBSTR(MAX(REPLACE(
SYS_CONNECT_BY_PATH(GOV_NAME, '/')
,'/',' - ')),2) Concatenated_String
FROM (
select A.*,
row_number() OVER (Partition by GOV_CODE order by GOV_CODE) ROW#
from INFLU.L_GOV A)
CONNECT BY PRIOR GOV_PARENT_CODE = GOV_CODE
START WITH GOV_PARENT_CODE = 5
GROUP BY GOV_CODE

You might also like