DYNAMIC RESULT SETS 1
LANGUAGE SQL
ss: BEGIN

	            BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
						SELECT *
						   FROM (
									 SELECT 
										   jj.JobName,
										   jpds.DataSetName,
										   jpgm.PgmName AS ProgramName,
										   '' AS ProgramAncestor,
										   '#EZ1#' AS Description,
										   0 AS Count,
										   jpgm.PgmName AS k,
										   jj.membername,
										   jref.MemberName AS dsMemberName,
										   CAST(NULL AS VARCHAR(256)) AS PathStr
									 FROM JCLJob jj
										 INNER JOIN JCLStep js ON jj.JobID = js.JobID
										 INNER JOIN JCLDD jd ON js.StepID = jd.StepID
										 INNER JOIN JCLDDRef jref ON jd.DDID = jref.DDID
										 INNER JOIN JCLPhysicalDataSet jpds ON jref.DataSetID = jpds.DataSetID
										 INNER JOIN JCLPgm jpgm ON js.CalledPgmID = jpgm.PgmID
									 WHERE UPPER(jpgm.PgmName) NOT IN  (   
																			  SELECT UPPER(pa.AliasName)
																			  FROM Programs p
																				   INNER JOIN ProgramAliases pa ON p.ProgramID = pa.ProgramId 
																			  WHERE p.OccurID <> 0 
																		  )
											AND jj.JobID IN (SELECT * FROM SESSION.numeric_param_temp)
		  
					                 UNION
					    
									SELECT 
										  jj.JobName,
										  jpds.DataSetName,
										  pgm.ProgramName,
										  ancestor(pgm.ProgramTypeid, pgm.Ancestor) AS Program_Ancestor,
										  '#EZ2#' AS Description,
										  0 AS Count,
										  (ancestor(pgm.ProgramTypeid, pgm.Ancestor) || pgm.ProgramName) AS k,
										  jj.membername,
										  jref.MemberName AS dsMemberName,
										  CAST(NULL AS VARCHAR(256)) AS PathStr
									FROM  (   
	                                         SELECT  p.ProgramID,
								                     p.Ancestor,
												     p.ProgramTypeID,
													 p.OccurID,
								                     pa.AliasName AS ProgramName
								              FROM Programs p
								                   INNER JOIN ProgramAliases pa ON p.ProgramID = pa.ProgramId AND pa.AliasType = 0
								           ) pgm 
										INNER JOIN ProgramsUsedInPgm pup ON pgm.ProgramID = pup.ProgramID
										INNER JOIN JCLStep js ON pup.JclPgmID = js.CalledPgmID
										INNER JOIN JCLJob jj ON jj.JobID = js.JobID
										INNER JOIN JCLDD jd ON js.StepID = jd.StepID
										INNER JOIN JCLDDRef jref ON jd.DDID = jref.DDID
										INNER JOIN JCLPhysicalDataSet jpds ON jref.DataSetID = jpds.DataSetID
										INNER JOIN StatementReference sr ON pgm.ProgramID = sr.ResourceID
									WHERE pgm.OccurID = 0
										  AND sr.ResourceType = 5
										  AND jj.JobID IN (SELECT * FROM SESSION.numeric_param_temp)
										  AND  (pgm.ProgramTypeID != -1
									OR (pgm.ProgramTypeID = -1
									    AND sr.Occurid NOT IN
									   (
										  SELECT DISTINCT  t.StmtRefOccurID
										  FROM
										  (
											 SELECT sr1.OccurID AS StmtRefOccurID,
												   pgm.ProgramID
											 FROM StatementReference sr1 
												 INNER JOIN Programs pgm ON pgm.ProgramID = sr1.ResourceID
											 WHERE sr1.ResourceType = 5
												  AND pgm.Occurid = 0
										  ) AS t
										  WHERE t.ProgramID = pup.ProgramID
									   )))
					             
							   
							      UNION
					    
								 SELECT jj.JobName,
									   jpds.DataSetName,
									   pgm.ProgramName,
									   ancestor(pgm.ProgramTypeid, pgm.Ancestor) AS Program_Ancestor,
									   st.Description AS Description,
									   COUNT(sr.OccurID) AS Count,
									   (ancestor(pgm.ProgramTypeid, pgm.Ancestor) || pgm.ProgramName) AS k,
									   jj.membername,
									   jref.MemberName AS dsMemberName,
									   pth.PathStr
								 FROM  (   
	                                         SELECT  p.ProgramID,
								                     p.Ancestor,
												     p.ProgramTypeID,
													 p.OccurID,
								                     pa.AliasName AS ProgramName
								              FROM Programs p
								                   INNER JOIN ProgramAliases pa ON p.ProgramID = pa.ProgramId AND pa.AliasType = 0
								           ) pgm
									 INNER JOIN ProgramsUsedInPgm pup ON pgm.ProgramID = pup.ProgramID
									 INNER JOIN JCLStep js  ON pup.JclPgmID = js.CalledPgmID
									 INNER JOIN JCLJob jj ON jj.JobID = js.JobID
									 INNER JOIN JCLDD jd ON js.StepID = jd.StepID
									 INNER JOIN JCLDDRef jref ON jd.DDID = jref.DDID
									 INNER JOIN JCLPhysicalDataSet jpds ON jref.DataSetID = jpds.DataSetID
									 INNER JOIN Files f ON pgm.ProgramID = f.ProgID
														      AND (UPPER(f.Name) = UPPER(jd.DDName)
															       OR 
																     --UPPER(f.Name) LIKE '%' || '-' || UPPER(jd.DDName)															   
																     (LOCATE_IN_STRING(UPPER(f.Name), '-'|| UPPER(jd.DDName), -1) > 0  -- check existence
                                                                      AND 
                                                                      LOCATE_IN_STRING(UPPER(f.Name), '-'|| UPPER(jd.DDName), -1) = LENGTH(f.Name) + 1 -1 - LENGTH(jd.DDName) -- last position in string
                                                                     )
																   )
									 INNER JOIN StatementReference sr  ON f.FileID = sr.ResourceID
									 INNER JOIN Statements st ON sr.StatementType = st.StatementType
									 LEFT OUTER JOIN
													  (
														 SELECT 1 AS Flag,
															   prax.AliasName,
															   prgx.ProgramTypeID
														 FROM Programs prgx
															 INNER JOIN ProgramAliases prax ON prgx.ProgramID = prax.ProgramId AND prax.AliasType = 0
														 GROUP BY prax.AliasName,
																prgx.ProgramTypeID
														 HAVING COUNT(*) > 1
													  ) x ON pgm.ProgramName = x.AliasName AND pgm.ProgramTypeID = x.ProgramTypeID
									LEFT OUTER JOIN Occurrences occ ON occ.OccurID = pgm.OccurID
									LEFT OUTER JOIN Paths pth ON pth.PathID = occ.PathID AND x.Flag = 1
								 WHERE sr.ResourceType = 9
								        AND jj.JobID IN (SELECT * FROM SESSION.numeric_param_temp)
								 GROUP BY jj.JobName,
										jj.membername,
										jpds.DataSetName,
										jref.MemberName,
										pgm.Ancestor,
										pgm.ProgramName,
										st.Description,
										pgm.ProgramTypeid,
										pth.PathStr
										
								UNION   --AMS statements

									 SELECT 
											jj.JobName,
											jpds.DataSetName,
											jpgm.PgmName AS ProgramName,
											'' AS ProgramAncestor,
											'AMS: ' || istmtp.Description AS Description,
											COUNT(istm.IDCAMSStatementID) AS Count,
											jpgm.PgmName AS k,
											jj.membername,
											idu.MemberName AS dsMemberName,
											CAST(NULL AS VARCHAR(256)) AS PathStr
									 FROM JCLJob jj
										  INNER JOIN JCLStep js ON jj.JobID = js.JobID
										  INNER JOIN JCLIDCAMSStatements istm ON js.StepID = istm.StepID
										  INNER JOIN JCLIDCAMSDatasetUsages idu ON idu.IDCAMSStatementID = istm.IDCAMSStatementID
										  INNER JOIN JCLPhysicalDataSet jpds ON idu.DataSetID = jpds.DataSetID
										  INNER JOIN JCLPgm jpgm ON js.CalledPgmID = jpgm.PgmID
										  INNER JOIN JCLIDCAMSStatementTypes istmtp ON istm.IDCAMSStatementTypeID = istmtp.IDCAMSStatementTypeID
								     WHERE jj.JobID IN (SELECT * FROM SESSION.numeric_param_temp)
									 GROUP BY jj.JobName,
											  jj.membername,
											  jpds.DataSetName,
											  idu.MemberName,
											  jpgm.PgmName,
											  Description
		
						    )src
					ORDER BY src.JobName,
					         src.membername,
					         src.DataSetName,
					         src.dsMemberName,
					         src.k,
							 src.PathStr,
					         src.Description;
						     
							 
						 

				         OPEN crs;
				
                END;
END ss	




