Dass SQL Application Services sich ebenso für die Informationsabfrage aus Datenbanken eignen, erläuterte Klaus-Peter Luttkus im vorangegangenen Teil. Nun geht es um Programmobjekte, die dabei helfen die Datenbankverwaltung strukturierter und effizienter zu gestalten.
Im vorherigen Teil dieser Reihe haben wir uns mit Bibliothekslisten beschäftigt. Jetzt gehen wir eine Ebene tiefer, um mit den Programmobjekten in Bibliotheken zu arbeiten.
Die SQL table function OBJECT_STATISTICS
Diese table function ist das Pendant zum CL-Befehl WRKOBJ / DSPOBJD. Wie wird diese Funktion angewendet?
Syntax-Informationen erhalten Sie hier:
Hier ein kleines Beispiel. Ich möchte wissen, welche Programmobjekte wurden in der Bibliothek EPS007 gespeichert:
18
19 Select *
20 From Table (
21 QSYS2.OBJECT_STATISTICS('EPS007', '*PGM')
22 )
23 where SQL_Object_type is null
24 ;
Ich habe bei dieser Abfrage alle Programmobjekte ausgeschlossen, die mittels SQL-Befehlen erzeugt wurden (Stored Procedures).
Das Ergebnis:

Jetzt alle Serviceprogramme in der Bibliothek EPS007:
25
26 Select *
27 From Table (
28 QSYS2.OBJECT_STATISTICS('EPS007', '*SRVPGM')
29 )
30 where SQL_Object_type is null
31 ;
Das Ergebnis:

Jetzt Programme und Serviceprogramme gemeinsam!
33 Select *
34 From Table (
35 QSYS2.OBJECT_STATISTICS('EPS007', '*PGM *SRVPGM')
36 )
37 where SQL_Object_type is null
38 ;
Beachten Sie den zweiten Parameter. Hier kann auch eine Liste verschiedener Objekttypen angegeben werden. Beachten Sie hierzu ebenfalls die Originaldokumentation. Es stehen hier auch Sonderwerte wie z. B. *LIBL, *ALLUSR usw. zur Verfügung.
Das Ergebnis:

Lassen Sie uns jetzt die Abfrage verfeinern, wir wollen eine Liste aller Programme und Serviceprogramme die sich in realen Benutzerbibliotheken befinden anlisten:
Dazu benötigen wir folgende Teilabfragen:
54
55 select System_Schema_Name from library_list_info A where TYPE not in('SYSTEM', 'PRODUCT) and
56 substring(Schema_Name, 1, 1) != 'Q'and
57 substring(Schema_Name, 1, 3) != 'SYS';
58
Anlisten aller realen Benutzerbibliotheken eines Jobs.
Weiterhin:
46
47 Select *
48 From Table (
49 QSYS2.OBJECT_STATISTICS('EPS007',
50 '*PGM *SRVPGM')
51 )
52 where SQL_Object_type is null
53 ;
Mit einem Subselect verknüpfen wir jetzt die beiden Abfragen:
59
60 Select
61 OBJLIB,
62 OBJNAME,
63 OBJTYPE
64 From Table (QSYS2.OBJECT_STATISTICS('*USRLIBL', '*PGM *SRVPGM'))
65 where SQL_Object_type is null and
66 OBJLIB in(
67 select
68 System_Schema_Name
69 from library_list_info
70 where TYPE not in('SYSTEM', 'PRODUCT') and
71 substring(Schema_Name, 1, 1) != 'Q'and
72 substring(Schema_Name, 1, 3) != 'SYS'
73 )
74 order by objlib, objtype;
75
Das Ergebnis:

Ich habe hier nur einige Felder aus der Gesamtmenge aller Felder ausgewählt, um die Anzeige einfacher zu gestalten.
Im nächsten Teil werden wir uns mit der Pflege von Programmobjekten beschäftigen.
Lesen Sie dazu SQL Application Services – Teil 3: Objektpflege.
Den Autor Klaus-Peter Luttkus erreichen Sie unter:
E-Mail: klaus.peter@luttkus-bremen.de
Website: luttkus-bremen.de
Für 88 Euro gibt’s hier sechs Monate lang tiefgreifendes IBM i und SQL Wissen. Hier kann man abonnieren.