zOs/SQL/CATRIR

-- Table Abhängigkeiten über RI - referential integrity dependencies
--     dieses Query zeigt die Abhängigkeits-Levels
--                            einer Menge von Tables
--     die richtige LadeReihefolge (load sequenceist) von 0 aufwaerts
--     Tables mit zyklischen RI-Abhängigkeiten werden mit Level=999
--         angezeigt, für diese ist ein Check unumgänglich
--
--     wenn ein Table (parent) geladen wird,
--         werden alle abhängigen (children) checkpending
--         und müssten also NACHHER geladen werden
--
--     Tabellen die CheckPending werden, aber nicht in der
--         die CheckPending werden, aber nicht in der AnfangsSelektion
--         (auf SysTableSpace) waren, werden mit einem Plus '+' markiert
--
with ri (lev, cr, tb, paCr, paTb, rel) as
(                         -- RekursionsStart
   select 0, creator, name,
             nullif('',''), nullIf('',''), 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: join zu Children
   union all select alt.lev+1, neu.creator, neu.tbName,
             neu.refTbCreator, neu.refTbName, neu.relName
       from ri alt, sysibm.sysRels neu
                          -- vom parent zum child
       where          lev < 999
                      and neu.refTbCreator = alt.cr
                      and neu.refTbname = alt.tb
                          -- Zyklen der Länge 1 ignorieren
           and not (  neu.creator = neu.refTbCreator
                      and  neu.tbname = neu.refTbName)
)
                          -- bei Truncation (SQLCODE = 445)
                          --     Länge vergrössern
select smallint(max(lev)) "level",
       case when min(lev) > 0 then '+' else ' ' end "+",
       char(strip(cr) ||'.'|| strip(tb), 32) "child",
       smallInt(count(distinct paCr || '.' || paTb)) "#par",
       min(char(strip(paCr) ||'.'|| strip(paTb), 32)) "firstParent",
       max(char(strip(paCr) ||'.'|| strip(paTb), 32)) "lastParent"
    from ri
    group by cr, tb
    order by 1 asc, 3 asc
;
x
select char(strip(creator) || '.' || strip(tbName), 20) "child",
       char(strip(refTbCreator) || '.' || strip(refTbName), 20) "par",
       relName
    from sysibm.sysRels
    where                        creator = 'A218545'
;