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      pgm.ProgramName,
						            sq.TableName,
						            st.Description,
						            COUNT(DISTINCT os.OccurID) AS stmtCount,
						            pgm.Ancestor,
									pgm.ProgramID,
									pgm.AncestorID
						     FROM StatementReference sr
						            INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
						            INNER JOIN Statements st ON os.StatementType = st.StatementType
						            INNER JOIN SESSION.programWithAlias pgm ON os.ProgID = pgm.ProgramID
						            INNER JOIN SqlTables sq ON sr.ResourceID = sq.SqlTableID
						     WHERE sr.ResourceType = 1
						     GROUP BY pgm.Ancestor,
						              pgm.ProgramName,
						              sq.TableName,
						              st.Description,
									  pgm.ProgramID,
									  pgm.AncestorID
						     ORDER BY pgm.Ancestor,
						              pgm.ProgramName,
									  pgm.ProgramID,
						              sq.TableName;

				       OPEN crs;
				
                END;
				
		END;

		
END	
