DYNAMIC RESULT SETS 1
LANGUAGE SQL
 BEGIN


          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
			 WHERE t.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
			;


	           BEGIN
					     DECLARE crs CURSOR WITH RETURN FOR
		           		 SELECT p.ProgramName, COUNT(DISTINCT os.OccurID) AS AssemblerBFP, p.Ancestor AS AncestorName, p.AncestorID
					     FROM OccurrencesStmt os
					          INNER JOIN SESSION.programWithAlias p ON os.ProgID = p.ProgramID
					     WHERE p.OccurID != 0
					           AND p.ProgramTypeid IN (8, 15, 16)
					     GROUP BY  p.ProgramName, p.Ancestor, p.AncestorID
					     ORDER BY  p.Ancestor, p.ProgramName, p.AncestorID;

				        OPEN crs;
				
                END;
				
		END;

		
END	
