Wo ist mein Sourcemember?

Ich denke, diese Frage hat sich jeder Programmierer bereit x-mal gestellt, ausser man hat ein CMS1 im Einsatz. Früher gab es zum Auffinden von Programmsources 3rd-Party-Tools wie Hawkeye Pathfinderexternal link, TOTAL/400external link von Adeonics oder JCRCMDS / JCR Utilitiesexternal link.
Auch FNDSRCMBR MBR(TESTPGM) LIB(*ALL) in den TAA Tools war hilfreich. Heute beantwortet man diese Frage per SQL2:
SQL
SELECT SYSTEM_TABLE_SCHEMA AS LIBRARY,
       SYSTEM_TABLE_NAME   AS SOURCE_FILE,
       SYSTEM_TABLE_MEMBER AS SOURCE_MEMBER,
       SOURCE_TYPE,
       TEXT_DESCRIPTION,
       LAST_SOURCE_UPDATE_TIMESTAMP
FROM QSYS2.SYSMEMBERSTAT
WHERE SYSTEM_TABLE_MEMBER = 'TESTPGM'
  AND SOURCE_TYPE IS NOT NULL
ORDER BY SYSTEM_TABLE_SCHEMA,
         SYSTEM_TABLE_NAME;
Oder nach einer Gruppe von Programmen suchen:
WHERE SYSTEM_TABLE_MEMBER like 'TEST%'
Schwierige Frage, einfache Lösung! Während das SQL läuft kann man mal einen Kaffee holen.

Oder umgekehrt: Das *PGM ist bekannt, aber nicht dessen Source

Bei einem kompilierten Objekt speichert IBM i die Source-Information zum Zeitpunkt der Erstellung mit ab. Für ILE-Programme kann man mit DSPPGM oder per SQL über BOUND_MODULE_INFO Sourcefile, Library und Member eruieren. Bei OPM-Programmen stehen entsprechende Source-Informationen auch in der Objektbeschreibung oder in OBJECT_STATISTICS(). Wird die Source später verschoben, bleibt im Programm natürlich die alte Compile-Information stehen.
Viel Spass beim Anwenden und bis bald. Weitere Auswertungen folgen . . .