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


          BEGIN


            DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAlias
			( 
                 ProgramID     INTEGER,
				 ProgramName   VARCHAR(256),
				 ProgramTypeID INTEGER,
				 OccurID       INTEGER,
				 AncestorID    INTEGER,
				 Ancestor      VARCHAR(256)
			) 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.ProgramTypeID <> 9
						GROUP BY pgm.Ancestor,
						         pgm.ProgramName,
								 pgm.ProgramID,
                                 pgm.AncestorID
						ORDER BY pgm.Ancestor,
						         pgm.ProgramName;

				         OPEN crs;
						 
				    END;

            END;					
				
END ss	


