zOs/SQL/CATRIRPA

-- Table Abhängigkeiten über RI
--     dieses Query zeigt die Abhängigkeits-Levels
--                            einer Menge von Tables
--     die richtige LadeReihefolge ist vom höchsten Level nach 0
--     Tables mit zyklischen RI-Abhängigkeiten werden mit Level=999
--         angezeigt, für diese ist ein Check unumgänglich
--
--        --> hier gehen wir die Parents hoch, für LoadReihenfolge
--            für LoadReihenfolge besser Children runter --> sql(catRir)
--
with ri (lev, creator, tbName, refTbCreator, refTbName, relName) as
(                         -- RekursionsStart
   select 0, nullif('',''), nullIf('',''), Creator, Name, nullIf('','')
       from sysibm.sysTables s
                          -->>> hier gewünschte Tabellen auswählen <<<--
       where type = 'T'
        -- and dbName like 'CT02%'
           and creator = 'VDPS2' and
               name in ( 'XTRECORD'
                        ,'XTCUSTOMER'
                        ,'XTREQUEST'
                        ,'XTREQUESTDETAIL'
                        ,'XTVIEW'
                        ,'XTVIEWATTRIBUTE'
                        ,'XTRECORDATTRIBUTE'
                        ,'XTREFERENCEMODULE'
                        ,'XTPROCESSINGSTEP'
                        ,'XTSEARCHATTRIBUTE'
                        ,'XTSEARCHSQL'
                        ,'XTREQUESTFILTER'
                       )
                          -- RekursionsSchritt: zu Parents join n
   union all select alt.lev+1, neu.creator, neu.tbName,
             neu.refTbCreator, neu.refTbName, neu.relName
       from ri alt, sysibm.sysRels neu
                          -- vom child zum Parent
       where          neu.creator = alt.refTbCreator
                      and  neu.tbname = alt.refTbName
                          -- Zyklen der Länge 1 ignorieren
           and not (  neu.creator = neu.refTbCreator
                      and  neu.tbname = neu.refTbName)
           and lev < 999
)
                          -- bei Truncation (SQLCODE = 445)
                          --     Länge vergrössern
select smallint(max(lev)) "level",
       char(strip(refTbCreator) ||'.'|| strip(refTbName), 32) "parent",
       smallInt(count(distinct creator || tbName)) "#child",
       min(char(strip(creator) ||'.'|| strip(tbName), 32)) "firstChild",
       max(char(strip(creator) ||'.'|| strip(tbName), 32)) "lastChild"
    from ri
    group by refTbCreator, refTbName
    order by 1 desc, 2 asc
;
x
select char(strip(creator) || '.' || strip(tbName), 20) "child",
       char(strip(refTbCreator) || '.' || strip(refTbName), 20) "par",
       relName
    from sysibm.sysRels
    where                        creator = 'A218545'
;