DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN


            DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAlias
			(
                 ProgramID     INTEGER,
				 ProgramName   VARCHAR(256),
				 ProgramTypeID INTEGER,
				 OccurID       INTEGER,
				 AncestorID    INTEGER,
				 Ancestor      VARCHAR(256)
			) WITH REPLACE 
			  ON COMMIT PRESERVE ROWS
			  NOT LOGGED;

             INSERT INTO SESSION.programWithAlias (ProgramID, ProgramName,  ProgramTypeID, OccurID, AncestorID, Ancestor)
             SELECT t.ProgramID, t.ProgramName, t.ProgramTypeID, t.OccurID, t.AncestorID, t.AncestorName
	         FROM TABLE(
			            fGetProgram_Ancestor_Aliases( CAST(NULL AS INTEGER) )
			         )t
			;


	            BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
					    SELECT DISTINCT
					            sqt.TableName,
					            jj.JobName,
					            pgm.ProgramName,
					            ancestor(pgm.ProgramTypeid, pgm.Ancestor) AS Program_Ancestor,
					            st.Description,
					            COUNT(os.OccurID) AS stmtCount,
					            (pgm.Ancestor || pgm.ProgramName) AS k,
					            jj.membername,
								pth.PathStr
					     FROM JCLJob jj
					          INNER JOIN JCLStep js ON jj.JobID = js.JobID
					          INNER JOIN ProgramsUsedInPgm pup ON pup.JclPgmID = js.CalledPgmID
					          INNER JOIN SESSION.programWithAlias pgm ON pup.ProgramID = pgm.ProgramID
					          INNER JOIN OccurrencesStmt os ON os.ProgID = pgm.ProgramID
					          INNER JOIN Statements st ON os.StatementType = st.StatementType
					          INNER JOIN StatementReference sr ON sr.OccurID = os.OccurID
					          INNER JOIN SqlTables sqt ON sr.ResourceID = sqt.SqlTableID
							  LEFT OUTER JOIN
													 (
														SELECT  1 AS Flag,
																pgx.ProgramName, pgx.ProgramTypeID
														 FROM SESSION.programWithAlias pgx
														 GROUP BY pgx.ProgramName, pgx.ProgramTypeID
														 HAVING COUNT(*) > 1
													 ) x ON pgm.ProgramName = x.ProgramName AND pgm.ProgramTypeID = x.ProgramTypeID
							   LEFT OUTER JOIN Paths pth ON pth.PathID = os.PathID AND x.Flag = 1
					     WHERE js.CalledPgmID > 0
					           AND sr.ResourceType = 1
					           AND sqt.TableName IN (SELECT * FROM SESSION.string_param_temp)
					     GROUP BY sqt.TableName,
					              jj.JobName,
					              jj.membername,
					              pgm.Ancestor,
					              pgm.ProgramName,
					              st.Description,
					              pgm.ProgramTypeid,
								  pth.PathStr
					     ORDER BY sqt.TableName,
					              jj.JobName,
					              jj.membername,
					              k,
								  pth.PathStr,
					              st.Description;
					
					

				       OPEN crs;
				
                END;
				
		
END 
