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.programWithAncestor;
			
		END;

        BEGIN
	            DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAncestor
				(
	                 ProgramID     INTEGER,
					 ProgramName   VARCHAR(256),
					 Ancestor      VARCHAR(256)
				) 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.OccurID > 0
			 	       AND  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 ,UPPER(mt.TransCode) AS tranNameU 
														       ,cp.ProgName AS progName ,UPPER(cp.ProgName)  AS progNameU
														       ,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     ,UPPER(Name) AS tranNameU
														       ,ProgName As progName ,UPPER(ProgName)  AS progNameU 
														       ,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 UPPER(pa.AliasName) = s1.progNameU
													LEFT OUTER JOIN 
																	(
																	 SELECT UPPER(r.Name) AS tranNameU  ,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 UPPER(r.Name) ,r.ResourceType
																	) s2 ON s1.tranNameU = s2.tranNameU 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 UPPER(pa2.AliasName) = UPPER(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;
				
END  ss	