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!

Exploring a hierarchical classes tree

JostJul 17 2015 — edited Jul 17 2015

Hi experts,

I'm back again with my hierarchical exploration query and issues.

Here are some sample data:

Table of Equipements (EQKT)

   

EQUNREQKTX
000000005002318484G09 - ARM.STEEL.1
000000005002468256PF   - EXLIM P360-GH     - Ph : 0

Table Equipements and Objects association (INOB)

   

OBJEKCUOBJ
000000005002318484000000000002944088
000000005002468256000000000003125606

Table Objects and Classes association  (KSSK)

As you can see, table KSSK stores data in a hierarchical way.

   

OBJEKCLINT
0000000000029440880000006420
00000064200000000737
00000007370000000693
0000000000031256060000002368
00000023680000000947
00000009470000000944

Joins between tables are done in the following way:

EQUI and INOB are joined on equnr = objek

INOB and KSSK are joined on objek = cuobj

KSSK hierarchical relationship between child and parent row is done on objek = clint

From this, I've written the following query :

WITH

equipments_tree AS

(

  SELECT eq.equnr, eq.eqktx, i.cuobj

  FROM sapsr3.eqkt eq

  INNER JOIN sapsr3.inob i ON i.objek = eq.equnr

  WHERE equnr IN ('000000005002318484','000000005002468256')

),

class_hierarchy AS

(

  SELECT ks.klart, ks.clint, et.cuobj

  FROM sapsr3.kssk ks

  INNER JOIN equipments_tree et ON ks.objek = et.cuobj

  START WITH ks.objek = et.cuobj CONNECT BY PRIOR ks.clint = ks.objek

)

SELECT * FROM equipments_tree et, class_hierarchy ch

WHERE et.cuobj = ch.cuobj

But the problem is as a result I'm getting only first level class for each equipment as shown below:

   

EQUNREQKTXCUOBJCLINT
000000005002318484G09 - ARM.STEEL.10000000000029440880000006420
000000005002468256PF   - EXLIM P360-GH     - Ph : 00000000000031256060000002368

While expected correct result should be:

As you can see in this sample data, each equipment is linked to a 3 levels class hierarchy:

   

EQUNREQKTXCUOBJCLINT
000000005002318484G09 - ARM.STEEL.10000000000029440880000006420
000000005002318484G09 - ARM.STEEL.10000000000029440880000000737
000000005002318484G09 - ARM.STEEL.10000000000029440880000000693
000000005002468256PF   - EXLIM P360-GH     - Ph : 00000000000031256060000002368
000000005002468256PF   - EXLIM P360-GH     - Ph : 00000000000031256060000000947
000000005002468256PF   - EXLIM P360-GH     - Ph : 00000000000031256060000000944

Your help on making this query work would be very much appreciated.

Here are CREATE TABLE and INSERT statements for sample data:

CREATE TABLE EQKT
(
  EQUNR  VARCHAR2(18 BYTE) NOT NULL,
  EQKTX  VARCHAR2(40 BYTE) NOT NULL
)

INSERT ALL
INTO EQKT(EQUNR,EQKTX) VALUES ('000000005002318484','G09 - ARM.STEEL.1')
INTO EQKT(EQUNR,EQKTX) VALUES ('000000005002468256','PF-EXLIM P360-GH-Ph:0')
SELECT 1 FROM DUAL;


CREATE TABLE INOB
(
  CUOBJ    VARCHAR2(18 BYTE) NOT NULL,
  OBJEK    VARCHAR2(50 BYTE) NOT NULL
)

INSERT ALL
  INTO INOB(CUOBJ,OBJEK) VALUES ('000000005002318484','000000000002944088')
  INTO INOB(CUOBJ,OBJEK) VALUES ('000000005002468256','000000000003125606')
SELECT 1 FROM DUAL;


CREATE TABLE KSSK
(
  OBJEK  VARCHAR2(50 BYTE) NOT NULL,
  CLINT  VARCHAR2(10 BYTE) NOT NULL
)

INSERT ALL
  INTO KSSK(OBJEK,CLINT) VALUES ('000000000002944088','0000006420')
  INTO KSSK(OBJEK,CLINT) VALUES ('0000006420','0000000737')
  INTO KSSK(OBJEK,CLINT) VALUES ('0000000737','0000000693')
  INTO KSSK(OBJEK,CLINT) VALUES ('000000000003125606','0000002368')
  INTO KSSK(OBJEK,CLINT) VALUES ('0000002368','0000000947')
  INTO KSSK(OBJEK,CLINT) VALUES ('0000000947','0000000944')
SELECT 1 FROM DUAL;

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 14 2015
Added on Jul 17 2015
5 comments
394 views