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.ProgramTypeID IN ( 1, 3);
			

	            BEGIN


                         DECLARE crs CURSOR WITH RETURN FOR
					     SELECT *
					     FROM (
									 SELECT(CASE
								           WHEN maf.FileName IS NOT NULL
								           THEN maf.FileName
								           ELSE CAST(af.FileNumber AS VARCHAR(16))
								       END) AS fName,
								      (CASE
								           WHEN mad.DBName IS NOT NULL
								           THEN mad.DBName
								           ELSE CAST(ad.DBNumber AS VARCHAR(16))
								       END) AS db,
								      prg.ProgramName AS ProgramName,
								      st.Description,
								      COUNT(os.OccurID) AS stmtCount,
									  pth.PathStr
								FROM StatementReference sr
								     INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID AND sr.ResourceType = 62
								     INNER JOIN Statements st ON os.StatementType = st.StatementType
								     INNER JOIN SESSION.programWithAlias prg ON os.ProgID = prg.ProgramID
								     INNER JOIN AdabasView av ON sr.ResourceID = av.ViewID
								     INNER JOIN AdabasFiles af ON af.FileID = av.AdabasFileID
								     INNER JOIN AdabasDatabases ad ON ad.AdabasDBID = af.AdabasDBID
								     LEFT OUTER JOIN MFAdabasFiles maf ON maf.FileNumber = af.FileNumber
								     LEFT OUTER JOIN MFAdabasDB mad ON mad.DBNumber = ad.DBNumber
									 LEFT OUTER JOIN
													 (
														SELECT  1 AS Flag,
																pgx.ProgramName, pgx.ProgramTypeID
														 FROM SESSION.programWithAlias pgx
														 GROUP BY pgx.ProgramName, pgx.ProgramTypeID
														 HAVING COUNT(*) > 1
													 ) x ON prg.ProgramName = x.ProgramName AND prg.ProgramTypeID = x.ProgramTypeID
							         LEFT OUTER JOIN Paths pth ON pth.PathID = os.PathID AND x.Flag = 1
								 WHERE af.FileID IN (SELECT * FROM SESSION.numeric_param_temp) 	
								 GROUP BY maf.FileName,
								          af.FileNumber,
								         mad.DBName,
								         ad.DBNumber,
								         prg.ProgramName,
								         st.Description,
										 pth.PathStr
								
								UNION
								SELECT(CASE
								           WHEN maf.FileName IS NOT NULL
								           THEN maf.FileName
								           ELSE CAST(af.FileNumber AS VARCHAR(16))
								       END) AS fName,
								      (CASE
								           WHEN mad.DBName IS NOT NULL
								           THEN mad.DBName
								           ELSE CAST(ad.DBNumber AS VARCHAR(16))
								       END) AS db,
								      prg.ProgramName AS ProgramName,
								      st.Description,
								      COUNT(os.OccurID) AS stmtCount,
									  pth.PathStr
								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 prg ON os.ProgID = prg.ProgramID
								     INNER JOIN AdabasFiles af ON sr.ResourceID = af.FileID
								                               AND sr.ResourceType = 56
								     INNER JOIN AdabasDatabases ad ON ad.AdabasDBID = af.AdabasDBID
								     LEFT OUTER JOIN MFAdabasFiles maf ON maf.FileNumber = af.FileNumber
								     LEFT OUTER JOIN MFAdabasDB mad ON mad.DBNumber = ad.DBNumber
									 LEFT OUTER JOIN
													 (
														SELECT  1 AS Flag,
																pgx.ProgramName, pgx.ProgramTypeID
														 FROM SESSION.programWithAlias pgx
														 GROUP BY pgx.ProgramName, pgx.ProgramTypeID
														 HAVING COUNT(*) > 1
													 ) x ON prg.ProgramName = x.ProgramName AND prg.ProgramTypeID = x.ProgramTypeID
							         LEFT OUTER JOIN Paths pth ON pth.PathID = os.PathID AND x.Flag = 1
								WHERE af.FileID IN (SELECT * FROM SESSION.numeric_param_temp) 	
								GROUP BY maf.FileName,
								         af.FileNumber,
								         mad.DBName,
								         ad.DBNumber,
								         prg.ProgramName,
								         st.Description,
										 pth.PathStr
								
								UNION
								SELECT(CASE
								           WHEN maf.FileName IS NOT NULL
								           THEN maf.FileName
								           ELSE CAST(af.FileNumber AS VARCHAR(16))
								       END) AS fName,
								      (CASE
								           WHEN mad.DBName IS NOT NULL
								           THEN mad.DBName
								           ELSE CAST(ad.DBNumber AS VARCHAR(16))
								       END) AS db,
								      prg.ProgramName AS ProgramName,
								      st.Description,
								      COUNT(os.OccurID) AS stmtCount,
									  pth.PathStr
								FROM StatementReference sr
								     INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
								                                   AND sr.ResourceType = 193
								     INNER JOIN Statements st ON os.StatementType = st.StatementType
								     INNER JOIN Programs prg ON os.ProgID = prg.ProgramID
									 INNER JOIN ProgramAliases pa ON pa.ProgramID = prg.ProgramID AND pa.AliasType = 0
								     INNER JOIN NaturalDBView ndv ON ndv.viewid = sr.ResourceID
								     INNER JOIN NaturalDDM nd ON nd.DDM_ID = ndv.DDM_ID
								     INNER JOIN AdabasView av ON av.ViewID = nd.ReferenceResourceID
								                              AND nd.ResourceType = 62
								     INNER JOIN AdabasFiles af ON af.FileID = av.AdabasFileID
								     INNER JOIN AdabasDatabases ad ON ad.AdabasDBID = af.AdabasDBID
								     LEFT OUTER JOIN MFAdabasFiles maf ON maf.FileNumber = af.FileNumber
								     LEFT OUTER JOIN MFAdabasDB mad ON mad.DBNumber = ad.DBNumber
									 LEFT OUTER JOIN
													 (
														SELECT  1 AS Flag,
																pgx.ProgramName, pgx.ProgramTypeID
														 FROM SESSION.programWithAlias pgx
														 GROUP BY pgx.ProgramName, pgx.ProgramTypeID
														 HAVING COUNT(*) > 1
													 ) x ON prg.ProgramName = x.ProgramName AND prg.ProgramTypeID = x.ProgramTypeID
									 LEFT OUTER JOIN Paths pth ON pth.PathID = os.PathID AND x.Flag = 1
								WHERE af.FileID IN (SELECT * FROM SESSION.numeric_param_temp)
								GROUP BY maf.FileName,
								         af.FileNumber,
								         mad.DBName,
								         ad.DBNumber,
								         prg.ProgramName,
								         st.Description,
										 pth.PathStr

					          ) x
					     ORDER BY fName, db, ProgramName, PathStr, Description;
					
					
				        OPEN crs;
			END;

        END;			
				

END	
