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  pgm.ProgramName,
                                COUNT(DISTINCT os.OccurID) AS NumOfStatements,
                                pgm.Ancestor,
                                pgm.ProgramID,
                                pgm.AncestorID
                         FROM OccurrencesStmt os
                              INNER JOIN SESSION.programWithAlias pgm ON os.ProgID = pgm.ProgramID
                         WHERE pgm.OccurID <> 0
                               AND pgm.ProgramTypeID <> 9
                         GROUP BY pgm.Ancestor,
                                  pgm.ProgramName,
                                  pgm.ProgramID,
                                  pgm.AncestorID
                         ORDER BY pgm.Ancestor,
                                  pgm.ProgramName;
								
                         OPEN crs;
						
                END;
				
         END;
		

END 
