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.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
						FROM  SESSION.programWithAncestor pgm
						      LEFT OUTER JOIN StatementReference sr ON sr.ResourceType = 5 AND pgm.ProgramID = sr.ResourceID  
						      LEFT OUTER JOIN (
							                      SELECT  pa2.ProgramId
											      FROM ProgramAliases pa2
	                							        INNER JOIN JCLPgm jp ON UPPER(pa2.AliasName) = UPPER(jp.PgmName)
	                							  GROUP BY pa2.ProgramID      
									           ) f1 ON pgm.ProgramID = f1.ProgramID
							  LEFT OUTER JOIN (
												 SELECT  pa3.ProgramId --,pa3.AliasName 
												 FROM ProgramAliases pa3
		                							   INNER JOIN (
																		SELECT UPPER(cp.ProgName) AS progName  
																		FROM MFCICSList m1
																				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 UPPER(ProgName) AS progName
																		FROM Resources  
																		WHERE ResourceType = 20
																	) tp ON UPPER(pa3.AliasName) = tp.ProgName
												  GROUP BY pa3.ProgramId					
									            ) f2 ON pgm.ProgramID = f2.ProgramID  				 									
					     WHERE sr.ResourceID IS NULL
				               AND f1.ProgramID IS NULL
				               AND f2.ProgramID IS NULL
					     ORDER BY k;
							
					     OPEN crs;
							    
    
                 END;
    
         END;
				
END ss	