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 Programs_2.ProgramName AS LogicalView,
					            Programs_1.ProgramName AS ProgramName,
					            st.Description AS SMARTStatementType,
					            COUNT(os.OccurID) AS stmtCount
					     FROM SESSION.programWithAlias Programs_2
					          INNER JOIN StatementReference sr ON Programs_2.ProgramID = sr.ResourceID
					          INNER JOIN OccurrencesStmt os  ON sr.OccurID = os.OccurID
							  INNER JOIN Statements st ON st.StatementType = os.StatementType
							  INNER JOIN SESSION.programWithAlias Programs_1 ON Programs_1.ProgramID = os.ProgID
					     WHERE sr.ResourceType = 5
					           AND Programs_2.ProgramTypeID = 4
							   AND UPPER(Programs_2.ProgramName) IN (SELECT UPPER(Param) FROM SESSION.string_param_temp)
					     GROUP BY Programs_2.ProgramName,
					              Programs_1.ProgramName,
					              st.Description
					     ORDER BY Programs_2.ProgramName,
					              Programs_1.ProgramName;
											 
						 OPEN crs;
						 
				END;

        END;				

END ss	



