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,
              ProgramTypeID INTEGER,
              ProgramName VARCHAR(256)
			) ON COMMIT PRESERVE ROWS NOT LOGGED ;

           INSERT INTO SESSION.programWithAlias (ProgramID, ProgramTypeID, ProgramName)
           SELECT p.ProgramID,
                  p.ProgramTypeID,
                  pa.AliasName AS ProgramName
		   FROM  Programs p
				  INNER JOIN ProgramAliases pa ON p.ProgramID = pa.ProgramId AND pa.AliasType = 0 
		   WHERE p.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp) ;



	            BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
					   						SELECT *
						FROM (
									  SELECT prg.ProgramName,
										    (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,
										    st.Description,
										    COUNT(os.OccurID) AS stmtCount,
											prg.ProgramID
									  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 aw ON sr.ResourceID = aw.ViewID
										  INNER JOIN AdabasFiles af ON af.FileID = aw.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
									  WHERE prg.ProgramTypeID = 1 --cobol with native sql
									  GROUP BY prg.ProgramName,
											 maf.FileName,
											 af.FileNumber,
											 mad.DBName,
											 ad.DBNumber,
											 st.Description,
											 prg.ProgramID
						    
									  UNION
						
						
								  SELECT prg.ProgramName,
									    (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,
									    st.Description,
									    COUNT(os.OccurID) AS stmtCount,
										prg.ProgramID
								  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
								  WHERE prg.ProgramTypeID = 1 --cobol direct call
								  GROUP BY prg.ProgramName,
										 maf.FileName,
										 af.FileNumber,
										 mad.DBName,
										 ad.DBNumber,
										 st.Description,
										 prg.ProgramID
						    
									  UNION
						
						    
								  SELECT prg.ProgramName,
									    (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,
									    st.Description,
									    COUNT(os.OccurID) AS stmtCount,
										prg.ProgramID
								  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 SESSION.programWithAlias prg ON os.ProgID = prg.ProgramID
									  INNER JOIN NaturalDBView ndw ON ndw.viewid = sr.ResourceID
									  INNER JOIN NaturalDDM nd ON nd.DDM_ID = ndw.DDM_ID
									  INNER JOIN AdabasView aw ON aw.ViewID = nd.ReferenceResourceID
															 AND nd.ResourceType = 62
									  INNER JOIN AdabasFiles af ON af.FileID = aw.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
								  WHERE prg.ProgramTypeID = 3 --natural
								  GROUP BY prg.ProgramName,
										 maf.FileName,
										 af.FileNumber,
										 mad.DBName,
										 ad.DBNumber,
										 st.Description,
										 prg.ProgramID
						      )src					
						ORDER BY src.ProgramName,
						         src.fName,
						         src.db,
						         src.Description;
					   

				       OPEN crs;
				
                END;
		END;
		
END ss	



