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
			;


	            BEGIN
						DECLARE crs CURSOR WITH RETURN FOR
						SELECT DISTINCT
						       pgm.ProgramName AS ProgramName,
						       COUNT(DISTINCT os.OccurID) AS CallCount,
						       pgm.Ancestor AS Ancestor,
							   pgm.ProgramID,
                               pgm.AncestorID
						FROM StatementReference sr
						     RIGHT OUTER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
						     RIGHT OUTER JOIN SESSION.programWithAlias pgm ON os.ProgID = pgm.ProgramID
						WHERE sr.ResourceType = 5
						      AND pgm.OccurID <> 0
						      AND pgm.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
						GROUP BY pgm.Ancestor,
						         pgm.ProgramName,
								 pgm.ProgramID,
                                 pgm.AncestorID
						ORDER BY pgm.Ancestor,
						         pgm.ProgramName;

				       OPEN crs;
				
                END;
		
        END;		
				
END	
