DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
         
	            DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAncestor
				(
	                 ProgramID     INTEGER,
					 ProgramName   VARCHAR(256),
					 Ancestor      VARCHAR(256)
				) WITH REPLACE
				  ON COMMIT PRESERVE ROWS
				  NOT LOGGED;

	             INSERT INTO SESSION.programWithAncestor (ProgramID ,ProgramName ,Ancestor)
	             SELECT t.ProgramID ,t.ProgramName ,t.AncestorName
		         FROM TABLE(
				             fGetProgram_Ancestor_Aliases( CAST(NULL AS INTEGER) )
				            )t
				 WHERE t.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp) AND 
	                   t.ProgramTypeID NOT IN (8, 9, 15, 16, 13, 19, 14);        
				

	             BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
						SELECT pgm.ProgramName ,pgm.Ancestor , COALESCE(pgm.Ancestor, '') || pgm.ProgramName AS k, pgm.ProgramID
			                  ,s3.tranName ,s3.tranType, s3.regionName
						FROM  SESSION.programWithAncestor pgm
						      INNER JOIN  (
											   SELECT pa.ProgramID ,s1.tranName ,s1.tranType, s1.regionName
											   FROM
												   (
														SELECT mt.TransCode AS tranName ,cp.ProgName AS progName  
														       ,14 AS tranType, MFCICSInfo.CICSName AS regionName
														FROM MFCICSList m1
															 INNER JOIN MFCICSInfo ON MFCICSInfo.CICSID = m1.CICSID
															 INNER JOIN MFCICSListVsGroup m2 ON m1.ListID = m2.ListID
															 INNER JOIN MFCICSGroup m3 ON m2.GroupID = m3.GroupID
															 INNER JOIN MFCICSGroupVsEntity m4 ON m3.GroupID = m4.GroupID AND m4.EntityTypeID = 2
															 INNER JOIN MFCICSGroupVsEntityLinks m5 ON m4.EntityID = m5.EntityID
															 INNER JOIN MFCICSTransaction mt ON m5.TransID = mt.TransID
															 INNER JOIN MFCICSProgram cp ON cp.ProgID = mt.ProgID AND mt.ProgID > 0
			                        
														UNION
			
														SELECT  Name AS tranName ,ProgName AS progName 
														     ,ResourceType AS tranType, CAST(NULL AS VARCHAR(8)) AS regionName
														FROM Resources  
														WHERE ResourceType = 20 AND progName IS NOT NULL 
												   )s1
													INNER JOIN ProgramAliases pa ON pa.AliasName = s1.progName
													LEFT OUTER JOIN 
																	(
																	 SELECT r.Name AS tranName  ,r.ResourceType AS tranType 
			                        								 FROM Resources r
																		INNER JOIN StatementReference sr ON sr.ResourceID = r.ResourceID AND sr.ResourceType IN (14 ,20)
			                       									 WHERE r.ResourceType IN (14 ,20)
																	 GROUP BY r.Name ,r.ResourceType
																	) s2 ON s1.tranName = s2.tranName AND s1.tranType = s2.tranType
											  WHERE s2.tranType IS NULL   
										   )s3 ON pgm.ProgramID = s3.ProgramID 
						      LEFT OUTER JOIN (
							                      SELECT  pa2.ProgramId
											      FROM ProgramAliases pa2
	                							        INNER JOIN JCLPgm jp ON pa2.AliasName = jp.PgmName
	                							  GROUP BY pa2.ProgramID      
									           ) f ON pgm.ProgramID = f.ProgramID 
						      LEFT OUTER JOIN StatementReference sr ON sr.ResourceType = 5 AND pgm.ProgramID = sr.ResourceID  		 									
					     WHERE     sr.ResourceID IS NULL
				                   AND f.ProgramID IS NULL
					     ORDER BY k;
							
					     OPEN crs;
							    
    
                 END;
    			
END 
