Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Lag + hierarchy query

RengudiApr 10 2023
Sample data:
(rn,net_id,parent_net_id,net_addr,NETWORK,IP_ADDRESS,PARENT_NODE,LVL,TREE) AS
SELECT 1 AS rn,2 AS net_id,NULL AS parent_net_id,3232235520 AS net_addr,'192.168.0.0/24' AS NETWORK,'192.168.0.0' AS IP_ADDRESS,'192.168.0.0/24' AS PARENT_NODE,1 AS LVL,'/192.168.0.0' AS TREE FROM dual
UNION ALL
SELECT 2,6,2,3232235776,'192.168.1.0/24','192.168.1.0','192.168.0.0/24',2,'/192.168.0.0/192.168.1.0' FROM dual
UNION ALL
SELECT 3,7,2,3232236032,'192.168.2.0/24','192.168.2.0','192.168.0.0/24',2,'/192.168.0.0/192.168.2.0' FROM dual
UNION ALL
SELECT 4,11,6,3232236288,'192.168.1.128/25','192.168.1.128','192.168.1.0/24',3,'/192.168.0.0/192.168.1.0/192.168.1.128' FROM dual
UNION ALL
SELECT 5,12,6,3232236544,'192.168.1.192/26','192.168.1.192','192.168.1.0/24',3,'/192.168.0.0/192.168.1.0/192.168.1.192' FROM dual
UNION ALL
SELECT 6,8,7,3232236288,'192.168.2.128/25','192.168.2.128','192.168.2.0/24',3,'/192.168.0.0/192.168.2.0/192.168.2.128' FROM dual
UNION ALL
SELECT 7,9,7,3232236544,'192.168.2.192/26','192.168.2.192','192.168.2.0/24',3,'/192.168.0.0/192.168.2.0/192.168.2.192' FROM dual
UNION ALL
SELECT 8,13,11,3232236304,'192.168.1.0/26','192.168.1.0','192.168.1.0/24/192.168.1.128',4,'/192.168.0.0/192.168.1.0/192.168.1.128/192.168.1.0' FROM dual;

Query:-          


		  select * from (SELECT ROWNUM
                      AS rn,
                  net_id,
                  parent_net_id,
                  addr,
                  PMU.int2quad (ADDR) || '/' || NET_PREFIX_LENGTH
                      AS "NETWORK",
                  SUBSTR (PMU.int2quad (ADDR), 1, 15)
                      "IP_ADDRESS",
                     CONNECT_BY_ROOT PMU.int2quad (ADDR)
                  || '/'
                  || NET_PREFIX_LENGTH
                      AS "PARENT_NODE",
                  LEVEL
                      LVL,
                  SYS_CONNECT_BY_PATH (PMU.int2quad (ADDR), '/')
                      "TREE"
             FROM HIERARCHY_TAB
       START WITH net_id > 1 AND parent_net_id IS NULL
       CONNECT BY NOCYCLE PRIOR net_id = PARENT_NET_ID
ORDER SIBLINGS BY addr) where network='192.168.1.0/24'

+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| rn | net_id | parent_net_id | addr       | NETWORK          | IP_ADDRESS    | PARENT_NODE                  | LVL | TREE                                               |
+====+========+===============+============+==================+===============+==============================+=====+====================================================+
| 1  | 2      | NULL          | 3232235520 | 192.168.0.0/24   | 192.168.0.0   | 192.168.0.0/24               | 1   | /192.168.0.0                                       |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 2  | 6      | 2             | 3232235776 | 192.168.1.0/24   | 192.168.1.0   | 192.168.0.0/24               | 2   | /192.168.0.0/192.168.1.0                           |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 3  | 7      | 2             | 3232236032 | 192.168.2.0/24   | 192.168.2.0   | 192.168.0.0/24               | 2   | /192.168.0.0/192.168.2.0                           |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 4  | 11     | 6             | 3232236288 | 192.168.1.128/25 | 192.168.1.128 | 192.168.1.0/24               | 3   | /192.168.0.0/192.168.1.0/192.168.1.128             |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 5  | 12     | 6             | 3232236544 | 192.168.1.192/26 | 192.168.1.192 | 192.168.1.0/24               | 3   | /192.168.0.0/192.168.1.0/192.168.1.192             |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 6  | 8      | 7             | 3232236288 | 192.168.2.128/25 | 192.168.2.128 | 192.168.2.0/24               | 3   | /192.168.0.0/192.168.2.0/192.168.2.128             |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 7  | 9      | 7             | 3232236544 | 192.168.2.192/26 | 192.168.2.192 | 192.168.2.0/24               | 3   | /192.168.0.0/192.168.2.0/192.168.2.192             |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+
| 8  | 13     | 11            | 3232236304 | 192.168.1.0/26   | 192.168.1.0   | 192.168.1.0/24/192.168.1.128 | 4   | /192.168.0.0/192.168.1.0/192.168.1.128/192.168.1.0 |
+----+--------+---------------+------------+------------------+---------------+------------------------------+-----+----------------------------------------------------+

Question:
1. for a given network I need to get network record and previous row.
2. for a given network I need to get network level and all previous levels of records till its parent_node;

Thanks!
This post has been answered by Solomon Yakobson on Apr 10 2023
Jump to Answer
Comments
Post Details
Added on Apr 10 2023
2 comments
446 views