DYNAMIC RESULT SETS 1
LANGUAGE SQL
ss: BEGIN   

    -- clean up temp table if exists 
		BEGIN
			DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
			BEGIN END;
			
			COMMIT;
			DROP TABLE SESSION.programWithAlias;
			
		 END;


          BEGIN


            DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAlias
			( 
                 ProgramID     INTEGER,
				 ProgramName   VARCHAR(256),
				 ProgramTypeID INTEGER,
				 OccurID       INTEGER,
				 AncestorID    INTEGER,
				 Ancestor      VARCHAR(256)
			) 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
						       jj.JobName,
						       pgm.programname,
						       pgm.Ancestor AS AncestorName,
						       stbl.TableName,
						       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 stbl ON sr.ResourceID = stbl.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 jj.JobID IN (SELECT * FROM SESSION.numeric_param_temp)
						GROUP BY jj.JobName,
						         jj.membername,
						         stbl.TableName,
						         pgm.Ancestor,
						         pgm.ProgramName,
						         st.Description,
						         pgm.ProgramTypeid,
								 pth.PathStr
						ORDER BY jj.JobName,
						         jj.membername,
						         stbl.TableName,
						         k,
								 pth.PathStr,
						         st.Description;
										   

				         OPEN crs;
				
                END;
				
		END;

		
END ss	


