B.Hauser
12-06-13, 18:39
Man kann sich auch mit einem Zweizeiler eine User Defined Table Function (UDTF) schreiben, die man dann immer wenn man sie braucht über SQL aufrufen und verarbeiten kann:
Create Or Replace Function YourLib/FindLibPGM
(ParPGM VarChar(10))
Returns Table (ObjLib Char(10) ,
Obj Char(10) ,
ObjDescr Char(50) )
Language SQL
Modifies SQL Data
Called On NULL Input
Disallow Parallel
Not Fenced
Begin
Declare CLCmd VarChar(256) Not Null Default '';
Set CLCmd = 'DSPOBJD OBJ(*ALL/' concat Trim(ParPGM) concat ') '
Concat ' OBJTYPE(*PGM) '
Concat ' OUTPUT(*OUTFILE) '
Concat ' OUTFILE(QTEMP/TMPOBJD) '
Concat ' OUTMBR(*FIRST *REPLACE) ';
Call QCMDEXC(CLCmd, Length(CLCmd));
Return Select ODLBNM, ODOBNM, ODOBTX
From QTEMP/TMPOBJD;
End ;
Wenn das Skript ordnungsgemäß ausgeführt wurde, d.h. die UDTF erstellt wurde, kann man sie von überall und jederzeit mit dem folgenden SQL-Befehl aufrufen:
select *
From Table(FindLibPgm('PGMNAME')) x;
Anstatt PGMNAME kann natürlich auch eine (Host-)Variable eingesetzt werden.
Birgitta
Create Or Replace Function YourLib/FindLibPGM
(ParPGM VarChar(10))
Returns Table (ObjLib Char(10) ,
Obj Char(10) ,
ObjDescr Char(50) )
Language SQL
Modifies SQL Data
Called On NULL Input
Disallow Parallel
Not Fenced
Begin
Declare CLCmd VarChar(256) Not Null Default '';
Set CLCmd = 'DSPOBJD OBJ(*ALL/' concat Trim(ParPGM) concat ') '
Concat ' OBJTYPE(*PGM) '
Concat ' OUTPUT(*OUTFILE) '
Concat ' OUTFILE(QTEMP/TMPOBJD) '
Concat ' OUTMBR(*FIRST *REPLACE) ';
Call QCMDEXC(CLCmd, Length(CLCmd));
Return Select ODLBNM, ODOBNM, ODOBTX
From QTEMP/TMPOBJD;
End ;
Wenn das Skript ordnungsgemäß ausgeführt wurde, d.h. die UDTF erstellt wurde, kann man sie von überall und jederzeit mit dem folgenden SQL-Befehl aufrufen:
select *
From Table(FindLibPgm('PGMNAME')) x;
Anstatt PGMNAME kann natürlich auch eine (Host-)Variable eingesetzt werden.
Birgitta